我继承的类中的构造函数需要传入一个非平凡的对象.类似于:
MyFoo::MyFoo() : SomeBase( complexstuff )
{
return;
}
Run Code Online (Sandbox Code Playgroud)
这complexstuff与之无关MyFoo,所以我不想传递它.
而不是写一些返回的1-off临时函数complexstuff我使用了lambda.我花了几分钟才弄明白的是我必须调用 lambda.所以我的代码现在看起来像这样:
MyFoo::MyFoo() : SomeBase(
[]()
{
/* blah blah do stuff with complexstuff */
return complexstuff;
} () )
{
return;
}
Run Code Online (Sandbox Code Playgroud)
如果你没有抓住它,它是微妙的.但是在lambda体之后,我不得不()告诉编译器立即"运行"lambda.在弄清楚我做错了什么之后才有意义.否则,如果没有()调用lambda,gcc会说类似于:
error: no matching function for call to 'SomeBase(<lambda()>)'
Run Code Online (Sandbox Code Playgroud)
但现在我有想法 - 我这样做了吗?在C++ 11或C++ 14中是否有更好的方法告诉编译器我希望它立即调用我编写的lambda?或者()像我通常的做法那样追加空洞?