加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

将多个参数绑定到C中的成员函数

发布时间:2020-12-16 03:24:49 所属栏目:百科 来源:网络整理
导读:假设我有一个带有成员函数的类A int f(){return m _;其中m_是数据成员.我有一个矢量 A调用vec,我希望使用std :: max_element在vec中找到最大m_值的对象.我可以用lambda做到这一点: auto cmp = [] (A x,A y) { return x.f() y.f(); };A max_elem = *std::max
假设我有一个带有成员函数的类A int f(){return m _;其中m_是数据成员.我有一个矢量< A>调用vec,我希望使用std :: max_element在vec中找到最大m_值的对象.我可以用lambda做到这一点:
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).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读