2015-05-29 93 views
1

這是這個問題c++ function ptr in unorderer_map, compile time error是不是std :: unordered_map <std :: string,std :: function <void(std :: string&)只能容納靜態函數?

我試圖用std::function不是函數指針的延續,我可以插入函數只有當函數是靜態的。否則我會得到下面的錯誤

main.cpp:15:11: error: no matching member function for call to 'insert'

map.insert(std::make_pair("one",&Example::procesString)); 
#include<string> 
#include <unordered_map> 
#include<functional> 

namespace Test 
{ 
namespace Test 
{ 
    class Example 
    { 
    public: 
    Example() 
    { 

     map.insert(std::make_pair("one",&Example::procesString)); 
    } 
    static void procesString(std::string & aString) 
    //void procesString(std::string & aString) -> compiler error 
    { 

    } 
    static void processStringTwo(std::string & aString) 
    { 

    } 

    std::unordered_map<std::string,std::function<void(std::string&)>> map; 
    }; 
} 
} 

int main() 
{ 
    return 0; 
} 

回答

4

在這種情況下,您的std::function類型是錯誤的。對於一個成員函數Example::processString(std::string&)

std::function<void(Example*, std::string&)> 

然而,就可以避免這一點,並通過早期綁定「吃掉」這this參數:

using std::placeholders; 
map.insert(std::make_pair("one", std::bind(&Example::processString, this, _1)); 

現在未被結合的唯一參數是字符串引用,所以類型可以保持:

std::function<void(std::string&)> 
+0

@Barry:哎呦 –

+0

不知道,如果你是酷我只需要編輯它,所以想我會發表評論。無論如何,+1。 – Barry

+0

@Barry:歡呼聲(FYI:不會介意;顯然只是一個小小的疏忽) –

相關問題