boost::bind如何与std::greater和std::less_equal一起工作?

How does the boost::bind work with std::greater and std::less_equal

本文关键字:std equal 工作 less 一起 greater bind boost      更新时间:2023-10-16

下面的代码用于计算满足以下条件的元素数量:

(i > 5) && (i <=10)
std::vector<int> ints;
..
int count=std::count_if(
  ints.begin(),
  ints.end(),
  boost::bind( // # bind 1
    std::logical_and<bool>(),
    boost::bind(std::greater<int>(),_1,5), // # bind 2
    boost::bind(std::less_equal<int>(),_1,10))); // # bind 3
template <class T> struct greater : binary_function <T,T,bool> {
  bool operator() (const T& x, const T& y) const
    {return x>y;}
};

我将上面的语句分解如下:

boost::bind(std::greater<int>(),_1,5)用于i > 5

boost::bind(std::less_equal<int>(),_1,10)用于i <=10

我的问题是如何理解上面的代码,因为如果我写代码,我会写以下内容:

boost::bind(std::greater<int>(),_2,5)用于i > 5boost::bind(std::less_equal<int>(),_2,10)用于i <=10

函数std::greater需要两个参数(即xy),并确保x > y。所以我认为我们需要将y5绑定,这样我们就可以找到所有的Xs。当然,我的想法是错误的。

有人能给我解释一下吗?谢谢你

占位符_1_2等指定了特定(最内部)bind调用返回的函子的参数,而不是您可能构建的完整表达式的参数。例如:

boost::bind(std::greater<int>(),_1,5)

bind返回一个函子,它将接收到的第一个形参作为第一个实参传递给greater<int>函子。