C++ 11: Nein, jeder Lambda-Ausdruck hat, ich zitiere (§5.1.2/3):
[...] eine einzigartige, unbenannte nicht gewerkschaftlich Klassentyp [ ...]
Dies bedeutet effektiv, dass Sie den Lambda-Typ nicht kennen können, ohne zuerst den entsprechenden Ausdruck zu kennen.
Nun, wenn Sie nichts erfasst haben, könnten Sie die Konvertierung zum Funktionszeiger verwenden und das zurückgeben (ein Funktionszeigertyp), aber das ist ziemlich einschränkend.
Wie @Luc bemerkt in der Lounge, wenn Sie bereit sind, Ihre make_counter
zu ersetzen (und wenn es nicht eine Vorlage oder überlastet, oder etwas ist), würde die folgende Arbeit:
auto const make_counter = [](int i = 0) {
return [i]() mutable { return i++; };
};
C++ 1y: Ja, durch Rückgabebetrag für normale Funktionen (N3582).
Dieser Lambda-Ausdruck ist auch nicht C++ 11 gültig. Der Rückgabetypabzug würde nicht funktionieren, wenn der Body mehr als nur den 'return expression;' (§5.1.2,4) enthält –
Technisch könnte man 'my_not_STD_function' zurückgeben, das einfach etwas im Wesentlichen Äquivalentes wiederimplementiert ... – Yakk
@Arne: Schuld OP zum Bearbeiten ...: P Fixed. – Xeo