auto cmp = [] (A& x,A& y) { return x.f() < y.f(); };A& max_elem = *std::max_element(vec.begin(),vec.end(),cmp);
是否有一些绑定(或一些这样的)技巧,允许我在没有lambda的情况下完成它并且不从头开始定义我自己的比较器?请不要建议更好的方法来解决最大发现问题.这只是一个例子.一般的问题是如何包装一个带有多个参数的函数对象(例如,std :: less< int>,我将在上面的例子中用作比较器),使得发送给它的参数变为通过其他功能(或成员函数)之前到达它.
解决方法 就在这里:using namespace std::placeholders;A& max = *std::max_element(begin(vec),end(vec),std::bind( &std::less<int>::operator(),std::less<int>(),std::bind(&A::f,_1),_2) ));
Live example
但是,如果我在代码审查中看到这一点,我会立即说“将丑陋变成一个lambda”.
感谢@ n.m.为了缩小代码可以缩短一点:
using namespace std::placeholders;A& max = *std::max_element(begin(vec),std::bind( std::less<int>(),_2) ));
Live example
不过,我仍然认为lambda更具可读性.请记住,您可以在调用max_element()时直接使用lambda(不需要原始代码中的变量cmp).
总结以上是内存溢出为你收集整理的将多个参数绑定到C中的成员函数全部内容,希望文章能够帮你解决将多个参数绑定到C中的成员函数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)