Wie ist es möglich, auf die Typen der Parameter einer Lambda-Funktion in C++ zuzugreifen? Folgendes funktioniert nicht:Wie kann ich auf die Typen eines Lambda in C++ 0x zugreifen?
template <class T> struct capture_lambda {
};
template <class R, class T> struct capture_lambda<R(T)> {
static void exec() {
}
};
template <class T> void test(T t) {
capture_lambda<T>::exec();
}
int main() {
test([](int i)->int{ return 0; });
}
Das obige kompiliert nicht, da der Compiler den Template-Prototyp statt der Spezialisierung wählt.
Gibt es eine Möglichkeit, das Obige zu tun?
Was ich eigentlich versuche zu erreichen, ist dies: Ich habe eine Liste von Funktionen, und ich möchte die entsprechende Funktion zum Aufrufen auswählen. Beispiel:
template <class T, class ...F> void exec(T t, F... f...) {
//select the appropriate function from 'F' to invoke, based on match with T.
}
Zum Beispiel möchte ich die Funktion aufzurufen, die ‚int‘ nimmt:
exec(1, [](char c){ printf("Error"); }, [](int i){ printf("Ok"); });
Ich frage nach einer etwas breiteren Sicht: Welches Problem versuchen Sie mit der 'exec' Funktion zu lösen? Klingt ein bisschen hässlich. – GManNickG
Ich versuche, einen algebraischen Unionstyp zu machen. – axilmar
Überladungsauflösung für beliebige Funktionsobjekttypen ... Ich kann mir keinen Weg vorstellen, dies zu tun. Wenn sie ihre Param-Typen exportieren würden, könnte es gemacht werden. Sonst habe ich keine Ahnung. –