【发布时间】:2021-02-16 12:40:03
【问题描述】:
Google 向我展示了很多关于将 lambdas 作为参数传递的 SO 帖子,但它们似乎都是基于 C++0x/C++11(例如 Use a lambda as a parameter for a C++ function),我知道这是一个在更新的 C++ 版本?
我想将一个非常简单的委托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 中?
(如果更新版本有不同的替代方案,请分享)
【问题讨论】:
-
不就是
myObject.SetXGetter( []{ return MyGlobals.GetX(); } );吗?你发现了什么?你尝试了什么?你不喜欢怎么办?在 C++11 改进后,你在哪里读到了这些版本,还有什么需要改进的?这是一个不清楚的问题。 -
@underscore_d 我不知道,我几乎没有使用过 lambda。鉴于我提供了一个确切的例子,这似乎很清楚......我怎样才能最简单地声明和调用
SetXGetter?正如我所说,我所找到的只是关于使用functors等的旧 C++ 的答案 -
为我工作。您是直接使用 lambda 还是
std::function? -
@Eljay 什么对你有用,没有人发布有效代码?我不知道你的问题是什么意思,但我想要最接近我的伪代码
-
也许你把事情搞糊涂了。从来没有必要使用凌乱的包装器和/或“临时类型”来将 lambda 传递给函数。顺便说一句,您链接的问题的答案仍然适用