gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:47:49 25 4
gpt4 key购买 nike

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com