gpt4 book ai didi

c++ - 在 C++17 中将 lambda 作为方法参数传递的最简单方法

转载 作者:行者123 更新时间:2023-12-03 19:40:07 25 4
gpt4 key购买 nike

谷歌向我展示了很多关于将 lambdas 作为参数传递的 SO 帖子,但它们似乎都是基于 C++0x/C++11(例如 Use a lambda as a parameter for a C++ function ),我知道这是一个在最近的 C++ 中有所改进的领域版本?
我想传递一个非常简单的委托(delegate) return MyGlobals.GetX()作为方法变量 - 在我的例子中 MyGlobals是一个全局对象。
即在 伪代码

//stores and/or calls the lambda
myObject.SetXGetter({return MyGlobals.GetX()});

MyObject::SetXGetter(lambda?)
{
this->mLambda = Lambda;
cout << mLambda();
}
旧的 C++ 版本使得不得不使用 STL 包装器和临时类型变得非常困惑,所以在 C++17 及更高版本中,它可以做得多么整洁...... SetGetter看起来像,可以称为直接传递 lambda 吗?
(如果更新版本有不同的替代方案,请分享)

最佳答案

只想在自己执行期间调用传递的 lambda 或其他仿函数的函数可以是函数模板,推断仿函数的类型:

template <typename F>
void use_it(F&& func) {
do_something_with(func());
}
在这里,您想要存储稍后调用的仿函数,因此我们需要一个可以包装各种仿函数的通用类型。这就是 std::function 是为了。假设返回类型为 int :
#include <functional>

class MyObject {
// ...
private:
std::function<int()> mLambda;
};
void MyObject::SetXGetter(std::function<int()> func) {
mLambda = std::move(func);
}
您的电话缺少初始 [捕获 ]这是 lambda 表达式所必需的,即使没有捕获任何内容:
myObject.SetXGetter([]{ return MyGlobals.GetX(); });

关于c++ - 在 C++17 中将 lambda 作为方法参数传递的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66224510/

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