我有一个控制台菜单类的工作代码:
目标是拥有一个函数向量,然后在用户选择它们时调用它们。
我有函数部分工作,但我希望能够包含类方法而不是函数,我不能。
部首:
typedef int (*FunctionPointer)();
class Menu {
string title;
vector <string> items;
vector <FunctionPointer> functions;
public:
Menu(string title);
void addMenuItem(string,FunctionPointer);
int showMenu();
};
代码:
int Menu::showMenu() {
//removed code to make it easier to read
//working code to get option
functions[option-1]();
return 0;
}
的main.cpp
int quit() {
cout << "QUIT";
return 0;
}
int main() {
Menu mainMenu("Main Menu");
Menu subMenu("Sub Menu");
mainMenu.addMenuItem("Sub Menu", *subMenu.showMenu);
mainMenu.addMenuItem("Quit", *quit);
mainMenu.showMenu();
}
退出函数指针完全正常,但我似乎无法找到一种方法使Menu类下的showMenu方法也能正常工作:\
任何帮助将不胜感激!
答案 0 :(得分:1)
showMenu
是一个成员函数,因此您需要为成员函数额外添加typedef
:
class Menu;
typedef int (*FunctionPointer)();
typedef int (Menu::*MemberFunctionPointer)();
// ^^^^^^
此外,您还需要为成员函数额外重载:
void addMenuItem(string, FunctionPointer) { }
void addMenuItem(string, MemberFunctionPointer) { }
此外,您需要传递成员函数的地址:
mainMenu.addMenuItem("Sub Menu", &Menu::showMenu);
// ^^^^^^^^^^^^^^^