Ich frage mich, ob es möglich ist, eine Funktion zu schreiben, die eine Lambda-Funktion in C ++ 11 zurückgibt. Ein Problem ist natürlich, wie eine solche Funktion deklariert wird. Jedes Lambda hat einen Typ, aber dieser Typ ist in C ++ nicht ausdrückbar. Ich denke nicht, dass das funktionieren würde:
auto retFun() -> decltype ([](int x) -> int)
{
return [](int x) { return x; }
}
Noch dies:
int(int) retFun();
Mir sind keine automatischen Konvertierungen von Lambdas in Zeiger auf Funktionen oder ähnliches bekannt. Ist die einzige Lösung, die ein Funktionsobjekt handgefertigt und zurückgibt?
decltype
nicht das gleiche wie im Funktionskörper ist und daher einen anderen Typ hat (auch wenn Sie die return-Anweisung enthalten haben)
decltype([](){})
oder sizeof([]() {})
ist schlecht geformt, egal wo du es schreibst.