繁体   English   中英

如何将成员函数指针插入地图?

[英]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;

但是我在任何一个上都遇到了“未能专门化函数模板”的错误。

我对函数指针并不是很熟悉,老实说,我花了好几个小时在谷歌上搜索和阅读问题和答案,但我找不到任何有效的方法。 请帮我。

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

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

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

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!");
}

现场演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM