重构嵌套绑定以使用 lambda 函数

Refactoring a nested bind to use a lambda function

本文关键字:lambda 函数 嵌套 绑定 重构      更新时间:2023-10-16

我很难尝试重构一些使用嵌套绑定的遗留代码。

这些示例显示了简单的实例,但当绑定嵌套且内部绑定具有占位符时,这些实例无济于事。

任何提示将不胜感激。

我们正在使用 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