estaba jugando un poco con c++ para crear una clase que manejara menus de consola.
Hasta ahora tengo algo funcionando como esto:
Código
void proc1(void){ std::cout << "proc1" << std::endl; } void proc1a(void){ std::cout << "proc1a" << std::endl; } void proc1b(void){ std::cout << "proc1b" << std::endl; } void proc2(void){ std::cout << "proc 2" << std::endl; } void proc3a(void){ std::cout << "proc 3a" << std::endl; } void proc3b(void){ std::cout << "proc 3b" << std::endl; } void proc3c(void){ std::cout << "proc 3c" << std::endl; } int main(int argc, char* argv[]){ CMenu menu; menu.AddMenu("OPCION 1", proc1); menu.AddSubMenu("OPCION1A", proc1a, 1); //submenu de la opcion 1 menu.AddSubMenu("OPCION1B", proc1b, 1); menu.AddMenu("OPCION 2", proc2); menu.AddMenu("OPCION 3", NULL); //opcion 3 separador, no tendria funcion menu.AddSubMenu("OPCION3A", proc3a, 3); //submenu de la opcion 3 menu.AddSubMenu("OPCION3B", proc3b, 3); menu.AddSubMenu("OPCION3C", proc3c, 3); menu.PrintMenu(); menu.DoMenu(); return 0; }
El resultado es algo asi:
Citar
1: OPCION 1
11: OPCION1A
12: OPCION1B
2: OPCION 2
3: OPCION 3
31: OPCION3A
32: OPCION3B
33: OPCION3C
0: SALIR
Eliga una Opcion:
11: OPCION1A
12: OPCION1B
2: OPCION 2
3: OPCION 3
31: OPCION3A
32: OPCION3B
33: OPCION3C
0: SALIR
Eliga una Opcion:
Por ejemplo si se elige la opcion 11, se llamará a proc1a(), y esto se repite hasta que se elija salir.
El problema es, el puntero a funcion como parametro lo tengo defenido asi:
Código
typedef void(*callback_proc_)(void); inline void CMenu::AddMenu(const char* cap, callback_proc_ proc){
Con esta estructura, estoy forzando que el procedimiento que esta asociado al item del menu es "void name(void)"
Como se podría hacer para poder pasar como parametro a AddMenu() una funcion con numero y tipo de parametros desconocido?
Saludos Y gracias