// { dg-do run } // GROUPS passed ptolemy-bugs #include class PTcl { public: int dispatcher(int which,int argc,char** argv); // fns in the table int one(int argc, char** argv); int two(int argc, char** argv); int three(int argc, char** argv); }; // An InterpFuncP is a pointer to an PTcl function that takes an argc-argv // argument list and returns TCL_OK or TCL_ERROR. typedef int (PTcl::*InterpFuncP)(int,char**); struct InterpTableEntry { const char* name; InterpFuncP func; }; // Here is the function table and dispatcher function. // These macros define entries for the table #define quote(x) #x #define ENTRY(verb) { quote(verb), &PTcl::verb } static InterpTableEntry funcTable[] = { ENTRY(one), ENTRY(two), ENTRY(three), {0, 0} }; int PTcl::dispatcher(int which, int argc, char** argv) { return (this->*(funcTable[which].func))(argc, argv); } void printargs(char** argv) { // while (*argv) { // cout << " " << *argv++; // } // cout << "\n"; } int PTcl::one(int, char** argv) { std::cout << "FAIL\n"; printargs(argv); return 1; } int PTcl::two(int, char** argv) { std::cout << "PASS\n"; printargs(argv); return 0; } int PTcl::three(int, char** argv) { std::cout << "FAIL\n"; printargs(argv); return 1; } int main (int argc, char** argv) { PTcl obj; return obj.dispatcher(1,argc,argv); }