私が指摘したいかもしれないこれらの3つの異なる機能があるとしましょう:
float test1(int a, int b) {
return 7.0f;
}
struct TestClass {
float test2(int a, int b) {
return 5.0f;
}
};
struct TestClass2 {
float test3(int a, int b) {
return 3.0f;
}
};
3 つすべてが同じ引数と戻り値を使用していることに注目してください。それがメンバー関数であるかどうか、およびそれがどのクラスに属しているかを抽象化したいと思います。初期化方法のみに応じて、これら 3 つの関数のいずれかを参照できるデリゲート型が必要です。
これが私の最初の試みです:
typedef std::function<float(int, int)> MyDelegate; // is this right?
int main() {
TestClass obj;
TestClass2 obj2;
MyDelegate a = test1;
MyDelegate b = std::bind(std::mem_fn(&TestClass::test2), obj); // is this right?
MyDelegate c = std::bind(std::mem_fn(&TestClass2::test3), obj2); // is this right?
return 0;
}
アイデアは、「this」ポインターもラッパー内に保存したいということです。このように、完全に機能するデリゲートのようになります。たとえば、'b(x, y)' の呼び出しは、obj.test2(x, y)
.
私はそれをコンパイルすることさえできません。おそらくこれを完全に把握していません。私はこれらのライブラリに慣れていないので、VS2012 のエラーは壊滅的に役に立ちません。どんな助けでも大歓迎です。