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 に答える