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 |