2015-11-04 46 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