c ++将类成员函数添加到Map中

时间:2017-02-27 14:30:54

标签: c++ insert stdmap std-pair

Menu::Menu( map < string, void(*)() > options) :
    menuOptions(options)
{}

Menu.h中的菜单选项说明:     私人的:         //简介:字符串的映射(描述选项)和要调用的链接函数         地图&lt; string,void(*)()&gt; menuOptions;

void Menu::printInvalidEntryErrorMessage() {
    cout << INVALID_ENTRY_ERROR_MESSAGE << endl; 
}

int Menu::startMenu() {
    pair<string, void(*)()> newPair = { "randomString", Menu::printInvalidEntryErrorMessage };
    menuOptions.insert(newPair);
}

尝试插入此菜单类成员的地图时出错。我在尝试编译代码时遇到的错误如下:

  

没有构造函数的实例“std :: pair&lt; _Ty1,_Ty2”&gt; :: pair [with _Ty1 = std :: string,_Ty2 = void(*)()]“匹配参数列表

我要问的是如何将成员函数插入到类中的地图中?

任何帮助将不胜感激。谢谢:))

1 个答案:

答案 0 :(得分:2)

&Menu::printInvalidEntryErrorMessage的类型不是void(*)(),而是void(Menu::*)()。你应该在你的地图中包含它:

using function_t = void(Menu::*)();
std::map<std::string, function_t> menuOption;

您可以像这样插入地图(它实际上更快!):

menuOption.emplace("Keeran", &Menu::printInvalidEntryErrorMessage);

原因是this:您需要将实例传递给您的成员函数。成员函数的指针使用如下:

auto func = &Menu::printInvalidEntryErrorMessage;
(this->*func)(); // call to function.