Estoy tratando de usar un C++ 11 Lambda para inicializar una variable miembro const
de una clase.¿Se puede usar una lista de inicialización de Lambda In A Class?
Un gran ejemplo simplificado:
class Foo
{
public:
const int n_;
Foo();
};
Foo::Foo()
: n_([]() -> int { return 42; })
{
}
int main()
{
Foo f;
}
En esta MSVC10 rendimientos:
error C2440: 'initializing' : cannot convert from '`anonymous-namespace'::<lambda0>' to 'const int'
En esta IDEONE rendimientos:
prog.cpp: In constructor 'Foo::Foo()':
prog.cpp:9:34: error: invalid conversion from 'int (*)()' to 'int'
estoy empezando a tener la idea de que yo no se puede usar lambdas en la lista de inicialización de una clase.
¿Lo puedo? Si es así, ¿cuál es la sintaxis correcta?
+1: Sí, estoy tratando de poblar 'n_' devolviendo el valor de la lambda. –
@John Ver la actualización. Y realmente veo cómo eso puede ser útil con una lambda más compleja (multi declaraciones). –
Exactamente. En mi caso de uso real, estoy almacenando el tamaño de un archivo de solo lectura en bytes. –