你能在类的初始化列表中使用Lambda吗?

Joh*_*ing 9 c++ lambda c++11

我试图使用C++ 11 Lambda来初始化类的const成员变量.

一个简单的例子:

class Foo
{
public:
    const int n_;
    Foo();
};

Foo::Foo()
:   n_( []() -> int { return 42; } )
{
}

int main()
{
    Foo f;
}
Run Code Online (Sandbox Code Playgroud)

在MSVC10中,这产生:

error C2440: 'initializing' : cannot convert from '`anonymous-namespace'::<lambda0>' to 'const int'
Run Code Online (Sandbox Code Playgroud)

IDEONE中,这会产生:

prog.cpp: In constructor 'Foo::Foo()':
prog.cpp:9:34: error: invalid conversion from 'int (*)()' to 'int'
Run Code Online (Sandbox Code Playgroud)

我开始认为我不能在类的初始化列表中使用lambdas.

我可以吗?如果是这样,那么正确的语法是什么?

sti*_*ijn 23

你正试图从lambda转换为int - 你应该调用lambda:

Foo::Foo()
:   n_( []() -> int { return 42; }() ) //note the () to call the lambda!
{
}
Run Code Online (Sandbox Code Playgroud)


Kon*_*lph 7

您的变量声明为int.

你想调用 lambda吗?这应该工作:

n_(([]() -> int { return 42; })())
Run Code Online (Sandbox Code Playgroud)

或者你想要一个类型的变量std::function<>