www.pudn.com > Loki.rar > Test_HierarchyGenerators2.cpp


#include  
#include  
#include "HierarchyGenerators.h" 
 
using namespace ::Loki; 
 
// 
// Helper class for simulating (ranking) partial ordering 
// 
template 
struct Order : Order {}; 
 
template<> 
struct Order<0> {}; 
 
template class Unit, class Root> 
class PrintGenLinearHierarchy 
{ 
    template 
    PrintGenLinearHierarchy(GenLinearHierarchy, Unit, Root> *a, Order<1>) 
    { 
        printf("%s\n", typeid(*a).name()); 
 
        Unit *base1 = a; 
 
        printf("%s\n", typeid(*base1).name()); 
     
        Root *base2 = base1; (void)base2; 
 
        printf("%s\n", typeid(*base2).name()); 
    } 
 
    template 
    PrintGenLinearHierarchy(GenLinearHierarchy, Unit, Root> *a, Order<0>) 
    { 
        printf("%s\n", typeid(*a).name()); 
 
        Unit > *base1 = a; 
        printf("%s\n", typeid(*base1).name()); 
     
        GenLinearHierarchy *base2 = base1; 
        PrintGenLinearHierarchy X(base2); 
    } 
 
public: 
    template 
    explicit PrintGenLinearHierarchy(GenLinearHierarchy, Unit, Root> *a) 
    { 
        PrintGenLinearHierarchy(a, Order<1>()); 
    } 
}; 
 
template  
class TestUnit : public Base {}; 
 
class TestRoot {}; 
 
template struct A {}; 
 
int 
main() 
{ 
    typedef TYPELIST_10(A<1>, A<2>, A<3>, A<4>, A<5>, A<6>, A<7>, A<8>, A<9>, A<10>) TestList_t; 
 
    GenLinearHierarchy TestGenLinearHierarchy; 
 
    PrintGenLinearHierarchy X(&TestGenLinearHierarchy); 
}