15 static char get() {
return 'A'; }
18 struct __B__ :
public __A__ {
19 static char get() {
return 'B'; }
22 struct __C__ :
public __A__ {
23 static char get() {
return 'C'; }
26 struct __D__ :
public __A__ {
27 static char get() {
return 'D'; }
38 int main(
int argc,
char **argv)
46 JParser<> zap(
"Example program to test selection of base class.");
52 catch(
const exception &error) {
53 FATAL(error.what() << endl);
58 typedef JTYPELIST<__A__,
61 __D__>::typelist typelistABCD;
63 typedef JTYPELIST<__B__,
66 __D__>::typelist typelistBACD;
68 typedef JTYPELIST<__B__,
71 __D__>::typelist typelistBCAD;
73 typedef JTYPELIST<__B__,
76 __A__>::typelist typelistBCDA;
78 DEBUG(
"A,B,C,D <- A? " << (JBaseType_t<__A__, typelistABCD>::is_base) << endl);
79 DEBUG(
"A,B,C,D <- B? " << (JBaseType_t<__B__, typelistABCD>::is_base) << endl);
81 DEBUG(
"A,B,C,D -> " << JBaseClass<typelistABCD>::data_type::get() << endl);
82 DEBUG(
"B,A,C,D -> " << JBaseClass<typelistBACD>::data_type::get() << endl);
83 DEBUG(
"B,C,A,D -> " << JBaseClass<typelistBCAD>::data_type::get() << endl);
84 DEBUG(
"B,C,D,A -> " << JBaseClass<typelistBCDA>::data_type::get() << endl);
85 DEBUG(
"B -> " << JBaseClass< JTypeList<__B__> >::data_type::get() << endl);
87 ASSERT(JBaseClass<typelistABCD>::data_type::get() == __A__::get());
88 ASSERT(JBaseClass<typelistBACD>::data_type::get() == __A__::get());
89 ASSERT(JBaseClass<typelistBCAD>::data_type::get() == __A__::get());
90 ASSERT(JBaseClass<typelistBCDA>::data_type::get() == __A__::get());
91 ASSERT(JBaseClass< JTypeList<__B__> >::data_type::get() == __B__::get());
Utility class to parse command line options.
int main(int argc, char *argv[])
Auxiliary class to identify common base class in type list.
#define ASSERT(A,...)
Assert macro.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
General purpose messaging.
Utility class to parse command line options.
#define DEBUG(A)
Message macros.