Próbuję użyć Lambda C++ 11, aby zainicjować zmienną składową const
klasy.Czy można użyć listy inicjalizacji klasy Lambda w klasie?
Znacznie uproszczony przykład:
class Foo
{
public:
const int n_;
Foo();
};
Foo::Foo()
: n_([]() -> int { return 42; })
{
}
int main()
{
Foo f;
}
W MSVC10 Daje:
error C2440: 'initializing' : cannot convert from '`anonymous-namespace'::<lambda0>' to 'const int'
W IDEONE Daje:
prog.cpp: In constructor 'Foo::Foo()':
prog.cpp:9:34: error: invalid conversion from 'int (*)()' to 'int'
Zaczynam się pomysł, że ja nie może używać lambd na liście inicjalizacji klasy.
Czy mogę? Jeśli tak, to jaka jest właściwa składnia?
+1: Tak, próbuję wypełnić 'n_', zwracając wartość z lambda. –
@John Zobacz aktualizację. I rzeczywiście widzę, jak to może być przydatne w przypadku bardziej złożonego (wielokrotnego wyrażania) lambda. –
Dokładnie. W moim przypadku użycia przechowuję rozmiar pliku tylko do odczytu w bajtach. –