我试图使用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)
您的变量声明为int.
你想调用 lambda吗?这应该工作:
n_(([]() -> int { return 42; })())
Run Code Online (Sandbox Code Playgroud)
或者你想要一个类型的变量std::function<>?
| 归档时间: |
|
| 查看次数: |
4701 次 |
| 最近记录: |