如何将成员函数指针插入到映射中?
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!");
}
我有这张地图:
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!");
}