我很难重构一些使用嵌套绑定的旧代码。
这些示例显示了简单的实例,但是当绑定嵌套在带有占位符的内部绑定中时,这无济于事。
任何提示将不胜感激。
我们正在使用C ++ 11。
return std::any_of(_vector.begin(), _vector.end(), std::bind(&Foo, std::bind(&Bar, std::placeholders::_1)));
这可以用两个嵌套的lambda来完成,还是可以用一个呢?
答案 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。