C ++11Lambdaを使用しconst
てクラスのメンバー変数を初期化しようとしています。
非常に単純化された例:
class Foo
{
public:
const int n_;
Foo();
};
Foo::Foo()
: n_( []() -> int { return 42; } )
{
}
int main()
{
Foo f;
}
MSVC10では、これにより次の結果が得られます。
error C2440: 'initializing' : cannot convert from '`anonymous-namespace'::<lambda0>' to 'const int'
IDEONEでは、これにより次の結果が得られます。
prog.cpp: In constructor 'Foo::Foo()':
prog.cpp:9:34: error: invalid conversion from 'int (*)()' to 'int'
クラスの初期化リストでラムダを使用できないという考えを持ち始めています。
できますか?もしそうなら、適切な構文は何ですか?