2012-01-20 38 views
0
class MyObject{ 
public: 
    void testFunctionMap(){ 
     std::unordered_map<std::string, std::function<void()> > functionMap; 
     std::pair<std::string, std::function<void()> > myPair("print", std::bind(&MyObject::printSomeText, this)); 
     functionMap.insert(myPair); 
     functionMap["print"](); 
    } 
    void printSomeText() 
    { 
     std::cout << "Printing some text"; 
    } 
}; 

MyObject o; 
o.testFunctionMap(); 

這工作正常。是否有另一種方法使用MyObject :: printSomeText函數作爲該對的值?如何創建一個unordered_map爲字符串功能

回答

2

是的,一個指針到成員函數:

std::unordered_map<std::string, void(MyObject::*)()> m; 
m["foo"] = &MyObject::printSomeText; 

// invoke: 
(this->*m["foo"])(); 

這僅允許您調用成員函數在當前情況下,而不是在任何給定的MyObject實例。如果您想要額外的靈活性,請改爲使用映射類型std::pair<MyObject*, void(MyObject::*)()>

相關問題