1

我有一个控制台菜单类的工作代码:

目标是拥有一个函数向量,然后在用户选择它们时调用它们。

我有函数部分工作,但我希望能够包含类方法而不是函数,这是我做不到的。

标题:

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;
}

主文件

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 方法也可以工作:\

任何帮助将不胜感激!

4

1 回答 1

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);
//                               ^^^^^^^^^^^^^^^
于 2013-10-14T23:10:42.150 回答