sagen, dass ich diese drei verschiedene Funktionen haben, die ich will kann Punkt:Verwendung std :: Funktion als Delegierter in 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;
}
};
Beachten Sie, wie alle drei die gleichen Argumente verwenden und Wert zurück. Ich möchte abstrahieren, ob es eine Mitgliedsfunktion ist und zu welcher Klasse es gehörte. Ich möchte einen Delegattyp, der sich nur auf eine dieser drei Funktionen beziehen kann, abhängig davon, wie er initialisiert wurde.
Hier ist mein erster Versuch:
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;
}
Die Idee ist, ich mag auch speichere den ‚diesen‘ Zeiger in zu dem Wrapper. Auf diese Weise ist es wie ein voll funktionsfähiger Delegat. Zum Beispiel sollte das Aufrufen von 'b (x, y)' wie das Aufrufen von obj.test2(x, y)
sein.
Ich kann es nicht einmal kompilieren lassen, ich bin wahrscheinlich nicht ganz dabei. Ich bin etwas neu in diesen Bibliotheken und die Fehler in VS2012 sind katastrophal nicht hilfreich. Jede Hilfe wäre willkommen.
mögliche Duplikate von [C++ 11 style Callbacks?] (Http://StackOverflow.com/questions/12338695/c11-styled-callbacks) – Klaim