Ich versuche, ein C++ 11 Lambda zu verwenden, um eine const
Mitgliedsvariable einer Klasse zu initialisieren.Können Sie ein Lambda in der Initialisierungsliste einer Klasse verwenden?
Ein wesentlich vereinfachtes Beispiel:
class Foo
{
public:
const int n_;
Foo();
};
Foo::Foo()
: n_([]() -> int { return 42; })
{
}
int main()
{
Foo f;
}
In MSVC10 ergibt dies:
error C2440: 'initializing' : cannot convert from '`anonymous-namespace'::<lambda0>' to 'const int'
In IDEONE Daraus ergibt sich:
prog.cpp: In constructor 'Foo::Foo()':
prog.cpp:9:34: error: invalid conversion from 'int (*)()' to 'int'
Ich fange an, die Idee zu bekommen, dass ich kann Lambda in der Initialisierungsliste einer Klasse nicht verwenden.
Kann ich? Wenn ja, wie lautet die richtige Syntax?
+1: Ja, ich versuche 'n_' zu füllen, indem ich den Wert von Lambda zurückgebe. –
@John Siehe Aktualisierung. Und ich sehe tatsächlich, wie das mit einem komplexeren Lambda (Multi-Statement) nützlich sein kann. –
Genau. In meinem tatsächlichen Anwendungsfall speichere ich die Größe einer schreibgeschützten Datei in Bytes. –