重构嵌套绑定以使用 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。您只需要记住 bind returns "function object" 和 lambda 都会生成 "function object",因此您只需要在原型和功能方面构造等价的 "function object" 即可。
IE。对于简单的 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。
我在尝试重构一些使用嵌套绑定的遗留代码时遇到了困难。
这些示例显示了简单的实例,但当绑定与具有占位符的内部绑定嵌套时没有帮助。
如有任何提示,我们将不胜感激。
我们正在使用 C++11。
return std::any_of(_vector.begin(), _vector.end(), std::bind(&Foo, std::bind(&Bar, std::placeholders::_1)));
这可以用两个嵌套的 lambda 来完成还是可以用一个来完成?
每个 bind
都可以简单地更改为 lambda。您只需要记住 bind returns "function object" 和 lambda 都会生成 "function object",因此您只需要在原型和功能方面构造等价的 "function object" 即可。
IE。对于简单的 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。