У меня есть этот рабочий код для класса меню консоли:Указатель класса Метод
Целью является иметь вектор функций, которые затем вызывается, когда пользователь выбирает их.
У меня есть часть функций, работающих, но я хочу иметь возможность включать методы класса вместо функций, которые я не могу.
Заголовок:
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();
}
отказа от курения указатель функции отлично работает, но я не могу найти способ чтобы сделать метод showMenu в классе меню тоже: \
Любая помощь будет принята с благодарностью!
Элемент функции указатели ar e несовместим с (свободными) указателями на функции. '& Menu :: showMenu' имеет тип' void (Меню :: *)() '. Этот '* subMenu.showMenu', скорее всего, плохо сформирован, и' * quit', вероятно, должен быть '& quit' или просто' quit'. – dyp
Прямым решением этой проблемы было бы заменить указатели на функции 'std :: function' и использовать 'bind (& Menu :: showMenu, subMenu)' (или по-ref с помощью 'std :: ref (subMenu) ') для создания совместимого объекта функции. Но я предпочел бы пересмотреть дизайн. –
dyp