2015-11-04 45 views
2

我有这样的地图:如何在地图中插入成员函数指针?

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

我不太明白如何增加价值呢?

我试图

cMap.insert(标准:: make_pair( “测试”,&管理:: testfunc));

而且

CMAP [ “测试”] = &经理:: testfunc;

但我得到“无法专门化功能模板”错误任何一个。

我不是那么熟悉函数指针,我老老实实地花了小时使用Google搜索和阅读问题和答案,但我找不到任何有用的东西。请帮帮我。

编辑: 现在,管理:: testfunc就是:

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

您可以显示'Manager :: testfunc'的定义? – Brian

+2

您是否尝试从'&Manager :: testfunc'初始化'std :: function '? – juanchopanza

+0

@Brian - 补充。这几乎只是一个外壳。在计算出如何使地图工作之后,我打算将代码添加到它。 – user2022185

回答

2

为了一个成员函数指针可以被调用,您必须将其绑定到一个对象。因此,提供了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!"); 
} 

LIVE DEMO

+0

谢谢!我的程序现在终于工作了! – user2022185