我有一个控制台菜单类的工作代码:
目标是拥有一个函数 vector ,然后在用户选择它们时调用它们。
我的函数部分可以正常工作,但我希望能够包含类方法而不是函数,但我做不到。
标题:
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;
}
主要.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 方法也能工作:\
任何帮助将不胜感激!
最佳答案
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);
// ^^^^^^^^^^^^^^^
关于c++ - 指向类方法的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19370549/