我有一個控制檯菜單類此工作代碼:指向類方法
該目標是有功能,當用戶選擇他們然後將其稱爲矢量。
我有功能部分工作,但我希望能夠包括類方法,而不是功能,我不能。
頁眉:
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方法也可以工作:\
任何幫助將不勝感激!
成員函數指針ar e與(免費)函數指針不兼容。 '&Menu :: showMenu'類型爲'void(Menu :: *)()'。這個'* subMenu.showMenu'很可能是格式不正確的,'* quit'應該是'&quit'或者'quit'。 – dyp
直接解決這個問題的方法是用'std :: function'替換函數指針並使用'bind(&Menu :: showMenu,subMenu)'(或者通過'std :: ref(subMenu) ')創建一個兼容的函數對象。但我寧願重新考慮設計。 –
dyp