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

时间:2019-07-18 03:13:40

标签: c++ c++11 lambda refactoring bind

我很难重构一些使用嵌套绑定的旧代码。

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

任何提示将不胜感激。

我们正在使用C ++ 11。

return std::any_of(_vector.begin(), _vector.end(), std::bind(&Foo, std::bind(&Bar, std::placeholders::_1)));                                                                                

这可以用两个嵌套的lambda来完成,还是可以用一个呢?

1 个答案:

答案 0 :(得分:1)

每个bind都可以简单地更改为lambda。您只需记住,两个绑定都返回“功能对象”,而lambda生成“功能对象”,因此您只需要在原型和功能方面构造等效的“功能对象”。 即对于简单的bind,它是这样的:

x = std::bind(&foo, arg1, arg2, ..., argX);

lambda是

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编译,例如--std=C++11用于GCC。