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
genlinearhierachy
shouldgenlinearhierarchy
- comma missing @ end of
opnewfactoryunit
before 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