本质上,我有一个很大的lambda函数,用于对自定义对象的向量进行排序。唯一的问题是lambda函数依赖于通过捕获组传递给它的对象。这已经工作了一段时间,但是现在我想在程序的不同部分中重用相同的功能。这是我的代码:
void fun(int i) {
...
BarMovement movement(i);
auto sortByBarMovement = [movement](OrderLogic::OpenOrder const& order1, OrderLogic::OpenOrder const& order2) -> bool
{
...
};
std::sort(std::begin(same_bar_order_fill), std::end(same_bar_order_fill), sortByBarMovement);
...
}
我想将sortByBarMovement
lambda移到它自己的函数中,以便我可以重用它。但是,它取决于movement
捕获组中的项目。
movement
如果移到sortByBarMovement
其他作用域,如何在C ++中将该对象传递给lambda函数?
Lambda只是函子的语法糖。最大的好处是,您可以在同一范围内直接在使用Lambda的地方直接编写它。另一方面,如果要在其他地方重用它,则与普通函数对象相比,lambda没有太大优势。也许更清楚是否跳过糖:
struct sortByBarMovement_type {
BarMovement movement;
sortByBarMovement_type(const BarMovement& movement) : movement(movement) {}
bool operator()(OrderLogic::OpenOrder const& order1, OrderLogic::OpenOrder const& order2) const {
...
}
};
基本上就是您所需要的。fun
现在看起来像这样:
void fun(int i) {
...
BarMovement movement(i);
sortByBarMovement_type sortByBarMovement{movement};
std::sort(std::begin(same_bar_order_fill), std::end(same_bar_order_fill), sortByBarMovement);
...
}
PS:我试图尽可能接近您的代码。这就是为什么我要复制的原因movement
。也许保持引用就足够了。而且您的lambdaoperator()
是const
但sortByBarMovement_type::operator()
不一定必须是const
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句