templates - Is this code from old Alexandrescu's C++ book valid? -
i reading old alexandrescu's book c++ templates , came across following code snippet explained abstractfactory pattern implementation (chapter 9.3). here is:
template <class, class, class> class genlinearhierachy; template <class, class> class opnewfactoryunit; template <class> class reverse; //definitions template < class abstractfact, template <class, class> class creator = opnewfactoryunit class tlist = typename abstractfact::productlist > class concretefactory : public genlinearhierarchy< typename tl::reverse<tlist>::result, creator, abstractfact> //here. { public: typedef typename abstractfact::productlist productlist; typedef tlist concreteproductlist; }; i don't why code valid. didn't defined tl anywhere in snippet.
no, code you've posted not correct.
there's few typos aren't relevant i'll mention them. may in book or maybe made when posted this. don't have book can't check
genlinearhierachyshouldgenlinearhierarchy- comma missing @ end of
opnewfactoryunitbefore template parameter
now out of way, no snippet not declare tl namespace or template <class> class reverse; inside namespace. declare template <class> class reverse; outside tl namespace, might error in book assuming that's entire snippet , there's no reason assume additional headers required.
the declaration related loki::tl::reverse< nulltype > declared in typelist.h of loki library.
third thing find confusing template parameter template <class, class> class creator = opnewfactoryunit passed second type parameter template <class, class, class> class genlinearhierachy though creator not type template! seems genlinearhierarchy intended template <class, template <class, class> class, class> class genlinearhierarchy;. match loki::genlinearhierarchy
with changes (fix typos, remove tl namespace, change type of genlinearhierarchy), code parses correctly.
Comments
Post a Comment