我有这张地图:
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!");
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句