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