Sto cercando di utilizzare un C++ 11 Lambda per inizializzare una variabile membro const
di una classe.È possibile utilizzare un elenco di inizializzazione di una Lambda in una classe?
Un gran esempio semplificato:
class Foo
{
public:
const int n_;
Foo();
};
Foo::Foo()
: n_([]() -> int { return 42; })
{
}
int main()
{
Foo f;
}
In questo MSVC10 rendimenti:
error C2440: 'initializing' : cannot convert from '`anonymous-namespace'::<lambda0>' to 'const int'
In questo IDEONE rendimenti:
prog.cpp: In constructor 'Foo::Foo()':
prog.cpp:9:34: error: invalid conversion from 'int (*)()' to 'int'
sto iniziando a ottenere l'idea che ho non è possibile utilizzare lambda in un elenco di inizializzazione di classe.
Posso? In tal caso, qual è la sintassi corretta?
+1: Sì, sto cercando di popolare 'n_' restituendo il valore dal lambda. –
@John Vedi aggiornamento. E in realtà vedo come ciò possa essere utile con un lambda più complesso (multi-statement). –
Esattamente. Nel mio caso di utilizzo effettivo, sto memorizzando la dimensione di un file di sola lettura in byte. –