Decir que tengo estas 3 funciones diferentes que yo quiero señalar a:El uso de std :: función como delegado en 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;
}
};
Observe cómo los tres utilizan los mismos argumentos y valor de retorno. Quiero resumir si es o no una función miembro y a qué clase pertenecía. Quiero un tipo de delegado que podría referirse a cualquiera de estas 3 funciones dependiendo únicamente de cómo se inicializó.
Aquí es mi primer intento:
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;
}
La idea es que quiero almacenar también el 'este' puntero dentro de la envoltura también. De esta forma, es como un delegado totalmente funcional. Por ejemplo, invocar 'b (x, y)' debería ser como llamar al obj.test2(x, y)
.
Simplemente no puedo hacer que compile, probablemente no estoy entendiendo esto completamente. Soy nuevo en estas bibliotecas y los errores en VS2012 son catastróficamente inútiles. Cualquier ayuda sería apreciada.
posible duplicado de [C++ 11 devoluciones de llamada de estilo?] (Http://stackoverflow.com/questions/12338695/c11-styled-callbacks) – Klaim