Say mam te 3 różne funkcje, które mogą chcę zwrócić się do:Używanie std :: funkcja jako delegat w C++ 11
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;
}
};
Zauważ, jak wszystkie trzy używać tych samych argumentów i wartości zwracanej. Chcę wykreślić, czy jest to funkcja członkowska i do której klasy należy. Chcę typu delegata, który może odnosić się do dowolnej z tych 3 funkcji w zależności tylko od tego, jak został zainicjowany.
Oto moja pierwsza próba:
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;
}
Chodzi o to, chcę też zapisać „ten” wskaźnik wewnątrz owijki też. W ten sposób jest to w pełni funkcjonalny delegat. Na przykład wywołanie "b (x, y)" powinno być jak wywołanie obj.test2(x, y)
.
Po prostu nie mogę nawet zmusić go do kompilacji, prawdopodobnie nie całkiem to rozumiem. Jestem trochę nowy w tych bibliotekach i błędy w VS2012 są katastrofalnie nieprzydatne. Każda pomoc będzie doceniona.
możliwy duplikat wywołań zwrotnych w stylu C++ 11? (Http://stackoverflow.com/questions/12338695/c11-styled-callbacks) – Klaim