如何将成员函数指针插入到映射中?

How do I insert a member-function pointer into a map?

我有这张地图:

std::map<std::string, std::function<void (std::string)>> cMap;

我不太明白如何给它增值?

我试过了

cMap.insert(std::make_pair("test", &Manager::testfunc));

cMap["test"] = &Manager::testfunc;

但是我在任何一个上都遇到了 "failed to specialize function template" 个错误。

我不是很熟悉函数指针,老实说,我花了 小时 谷歌搜索和阅读问题和答案,但我就是找不到任何有用的东西。请帮助我。

编辑: 现在,Manager::testfunc 只是:

void Manager::testfunc (std::string value) { }

为了使成员函数指针可调用,您必须将它绑定到一个对象。因此,提供一个 Manager 对象(例如,Manager m),您可以使用 std::bind 绑定一个成员函数(例如,void Manager::foo(std::string const&)),然后将它插入到您的 [=15] =]如下:

struct Manager {
  void foo(std::string const& str) { std::cout << str << std::endl; }
};

int main() {
  std::map<std::string, std::function<void(std::string const&)>> cMap;
  Manager m;
  cMap.insert(std::make_pair("test", std::bind(&Manager::foo, &m, std::placeholders::_1)));
  cMap["test"]("Hello, world!");
}

LIVE DEMO