指向类方法的指针

时间:2013-10-14 22:53:14

标签: c++ class

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

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

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

部首:

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方法也能正常工作:\

任何帮助将不胜感激!

1 个答案:

答案 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);
//                               ^^^^^^^^^^^^^^^