gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 02:19:22 26 4
gpt4 key购买 nike

我有这张 map :

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

我不太明白如何为其增加值(value)?

我试过了

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

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

但我在任何一个上都收到“无法专门化函数模板”错误。

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

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

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

最佳答案

为了使成员函数指针可调用,您必须将其绑定(bind)到一个对象。因此,提供一个 Manager 对象(例如,Manager m),您可以使用 std::bind 来绑定(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!");
}

LIVE DEMO

关于c++ - 如何将成员函数指针插入到映射中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33532362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com