class Base { template<int i> struct S{}; template<> struct S<0>{}; }; class Derived:Base { template<int i> struct S{}; template<> struct S<0>{}; };
class Base { template<int i, class> struct S{}; template<> struct S<0,Base>{}; }; class Derived:Base { template<int i, class> struct S{}; template<> struct S<0,Derived>{}; };
hence in order to support inheriting reflected classes from eachother all corresponding member template classes get an additional parameter:
template<class Tag, class> struct GetValueTypeByTag
and the full specializations defined through the macros to reflect members specialize these compile time functions with the enclosing class as second parameter.
Last revised: September 13, 2004 | Copyright © 2004 Arne Adams |