gpt4 book ai didi

c++ - 如何立即调用 C++ lambda?

转载 作者:可可西里 更新时间:2023-11-01 14:57:29 28 4
gpt4 key购买 nike

我正在继承的类的构造函数需要传入一个非平凡的对象。类似于此:

MyFoo::MyFoo() : SomeBase( complexstuff )
{
return;
}

complexstuffMyFoo 几乎没有关系,因此我不想将其传入。

我没有编写某种一次性返回 complexstuff 的临时函数,而是使用了 lambda。我花了几分钟才弄清楚的是,我必须调用 lambda。所以我的代码现在看起来像这样:

MyFoo::MyFoo() : SomeBase(
[]()
{
/* blah blah do stuff with complexstuff */
return complexstuff;
} () )
{
return;
}

如果你没有发现它,它是微妙的。但是在 lambda 主体之后,我不得不放入 () 来告诉编译器立即“运行”lambda。在我弄清楚我做错了什么之后,这是有道理的。否则,如果没有 () 来调用 lambda,gcc 会说类似这样的话:

error: no matching function for call to 'SomeBase(<lambda()>)'

但现在我开始思考——我这样做是否正确?在 C++11 或 C++14 中是否有更好的方法来告诉编译器我希望它立即调用我编写的 lambda?还是像我通常那样附加一个空的 ()

最佳答案

But now that has me thinking -- did I do this correctly?

是的,你做到了。

Is there a better way in C++11 or C++14 to tell the compiler that I want it to immediately invoke a lambda I've written?

据我所知没有。 lambda 也只是一个函数对象,所以你需要有一个 () 来调用它,没有办法绕过它(当然除了一些调用类似于 std::invoke) 的 lambda。

如果您愿意,可以在捕获列表之后删除 (),因为您的 lambda 不接受任何参数。

Or is appending an empty () like I did the usual way to do this?

是的,这是最短的路。如前所述,std::invoke 也可以代替,但它需要更多的输入。我会说用 () 直接调用是通常的做法。

关于c++ - 如何立即调用 C++ lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44868369/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com