クラスのメンバー変数const
を初期化するためにC++ 11ラムダを使用しようとしています。クラスの初期化リストでラムダを使用できますか?
くらいの簡単な例:MSVC10で
class Foo
{
public:
const int n_;
Foo();
};
Foo::Foo()
: n_([]() -> int { return 42; })
{
}
int main()
{
Foo f;
}
この利回り:IDEONEで
error C2440: 'initializing' : cannot convert from '`anonymous-namespace'::<lambda0>' to 'const int'
この利回り:
prog.cpp: In constructor 'Foo::Foo()':
prog.cpp:9:34: error: invalid conversion from 'int (*)()' to 'int'
私はアイデアを得るために始めていますクラスの初期化リストでlambdaを使用することはできません。
できますか?もしそうなら、適切な構文は何ですか?
+1:はい、私はラムダから値を返すことによって 'n_'を設定しようとしています。 –
@John更新を参照してください。そして、実際にはもっと複雑な(複数のステートメント)ラムダでどのように役立つのか分かります。 –
正確です。実際の使用例では、読み取り専用ファイルのサイズをバイト単位で保存しています。 –