c++ - 指向类方法的指针

标签 c++ class

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

目标是拥有一个函数 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/

相关文章:

c++ - 如何使用 C++ 代码验证 CPU 缓存行大小?

c# - 生成具有方法类型的类的方法列表

java - 是否可以使 Class.forName ("") 灵活?

java - 计算一个类的 x 个对象的平均成绩

c++ - 包装一个运算符重载方法

c++ std::vector<> vs new[] 性能

python - 无需 __dict__ 或 dir() 即可获取有关已定义属性的信息

c++ - 如何从嵌套类访问 static int?

c++ - 使用初始化列表初始化类中的 std::ofstream

c++ - Boost::ASIO - 如何使用 2 个线程来处理接收和发送消息