C++ 11のfunction
を使用してクラスメソッドへのマップを作成しようとしています。メソッドへのマップC++ 11
Cスタイルの関数ポインタ:
方法:
void MyClass::MyMethod(void*);
地図宣言:
std::map<int, void (MyClass::*)(void*)> mapIdToMethod;
地図のインサート:
mapIdToMethod.insert(std::make_pair(2, &MyClass::MyMethod));
メソッドの呼び出し:
MyClass mc;
(mc.*mapIdToMethod.at(1))(nullptr);
上記のコードは動作しますが、どのようにC++ 11のfunction
を使用するように変換できますか?私が試したよ何
:
マップ宣言:
std::map<int, function<void(void*)>> mapIdToMethod;//The map declare
、私はどのように挿入し、このmap
上のメソッドを呼び出すことができますか?
場合。 **壊れていない場合は修正しないでください** – bolov
std :: functionは別のものです。元のコードはメンバ関数ポインタのみを格納します。 std :: functionでは、メンバ関数ポインタがクラスのインスタンスにバインドされている必要があります。 –
関数MyMethodが何らかの内部状態を使用している場合は、それを[バインド](http://en.cppreference.com/w/cpp/utility/functional/bind)するか、ラムダを使用する必要があります。しかし、@ bolovが言っているように、動作すればそれを変更すべきではありません。少なくともstd :: functionはランタイムオーバーヘッドをそれに置きますので、そのままにしておきます。 – Incomputable