gpt4 book ai didi

c++ - 在 C++ 中将多个参数绑定(bind)到成员函数

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:16:16 25 4
gpt4 key购买 nike

假设我有课 A具有成员函数 int f() { return m_; }其中 m_是一个数据成员。我有一个 vector<A>称为 vec ,我想找到最大 m_ 的对象vec 中的值使用 std::max_element .我可以用 lambda 来做:

auto cmp = [] (A& x, A& y) { return x.f() < y.f(); };
A& max_elem = *std::max_element(vec.begin(), vec.end(), cmp);

有没有bind (或某些类似的)技巧可以让我在没有 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)
, std::bind(&A::f, _2)
)
);

Live example

但是,如果我在代码审查中看到这个,我会立即说“把那个丑陋的东西变成一个 lambda”。


感谢@n.m。指出代码可以缩短一点:

using namespace std::placeholders;
A& max = *std::max_element(begin(vec), end(vec)
, std::bind(
std::less<int>()
, std::bind(&A::f, _1)
, std::bind(&A::f, _2)
)
);

Live example

不过,我仍然认为 lambda 更具可读性。请记住,您可以在调用 max_element() 时直接使用 lambda(原始代码中不需要变量 cmp)。

关于c++ - 在 C++ 中将多个参数绑定(bind)到成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21877645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com