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 函数作为该对的值?

4

1 回答 1

2

是的,指向成员函数的指针:

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

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

这仅允许您在当前实例上调用成员函数,而不是在任何给定MyObject实例上。如果您想要额外的灵活性,请将映射类型std::pair<MyObject*, void(MyObject::*)()>改为 a。

于 2012-01-20T04:04:06.893 回答