重构嵌套绑定以使用 lambda 函数
Refactoring a nested bind to use a lambda function
我很难尝试重构一些使用嵌套绑定的遗留代码。
这些示例显示了简单的实例,但当绑定嵌套且内部绑定具有占位符时,这些实例无济于事。
任何提示将不胜感激。
我们正在使用 C++11。
return std::any_of(_vector.begin(), _vector.end(), std::bind(&Foo, std::bind(&Bar, std::placeholders::_1)));
这可以用两个嵌套的 lambda 来完成,还是可以用一个来完成?
每个bind
都可以简单地更改为lambda。你需要记住,绑定都返回"函数对象",lambda 都生成"函数对象",所以你只需要在原型和功能方面构造等效的"函数对象"。即对于简单的bind
它是这样的:
x = std::bind(&foo, arg1, arg2, ..., argX);
λ是
x = [](T1 val1, T2 val2, ..., Ty valY) {return foo(arg1, arg2, ..., argx);}
其中每个占位符应替换为相应的valY
。
所有内部绑定都可以视为函数调用。
即您的情况应该是这样的:
return std::any_of(_vector.begin(), _vector.end(), [](T1& val1) {return Foo(Bar(val1);});
如果你的编译器抱怨大括号,请确保你编译C++11,例如,为GCC --std=C++11
。
相关文章:
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何建立使用模板函数的lambda函数的尾部返回类型
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 两组使用lambda函数的大括号
- 尝试将lambda函数放在队列中时出现一般分配器错误(可能是与unique_ptr有关的错误)
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?
- 为什么我不能在 constexpr lambda 函数中使用 std::tuple
- C++:Lambda 函数指针转换的用例是什么?
- 将 lambda 函数作为参数传递C++
- 如何将 lambda 函数作为参数发送到另一个函数
- 传递 lambda 函数的权衡是什么?
- 如何使用类模拟 C++11 中的 lambda 函数和闭包?
- 不是 lambda 函数中的常量表达式
- 如何使用可变参数数重载 lambda 函数?
- 如何通过指针传递lambda函数?
- 使用带有 lambda 函数指针的模板
- openmp c++ 中并行块内 lambda 函数的奇怪行为
- C++ 中 Lambda 函数中的溢出
- 将数组传递到 lambda 函数中
- lambda 函数未显示正确的结果