相关疑难解决方法(0)

如何立即调用C++ lambda?

我继承的类中的构造函数需要传入一个非平凡的对象.类似于:

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?或者()像我通常的做法那样追加空洞?

c++ lambda c++11 c++14

13
推荐指数
3
解决办法
5910
查看次数

标签 统计

c++ ×1

c++11 ×1

c++14 ×1

lambda ×1