0
template <class T> struct greater : binary_function <T,T,bool> {
  bool operator() (const T& x, const T& y) const
    {return x>y;}
};

template <class T> struct logical_and : binary_function <T,T,bool> {
  bool operator() (const T& x, const T& y) const
    {return x&&y;}
};

// (i > 5 && i <=10)
countBoost = std::count_if(vecInts.begin(), vecInts.end(),
                           boost::bind(std::logical_and<bool>(), 
                                                        ^^^^ // ???? Why ????
                                    boost::bind(std::greater<int>(),    _1, 5),
                                    boost::bind(std::less_equal<int>(), _1, 10))
                          );

根据我的理解,Tfor的传入类型std::logical_and<T>是 function 的传入参数的类型operator()。鉴于上面的代码,似乎 is 的类型std::greaterbool由 的返回值决定的 operator()

那是对的吗?

谢谢

4

2 回答 2

2

函数的返回类型operator()是 bool。的类型 std::greaterstd::greater。它是一个功能对象。因此:

std::greater<int> g;
std::cout << typeof( g ).name() << std::endl;

将返回编译器用来显示类模板的实例化类型的任何内容:"struct std::greater<int>"例如,对于 VC++。

于 2012-04-23T16:47:35.037 回答
1

boost binder 的魔力比你想象的要多。当绑定参数之一是绑定表达式本身时,它将在调用期间执行该表达式并使用结果。std::less<int>在这种情况下,内部绑定表达式是对and的调用std::greater<int>,两者都产生 a bool,然后将其传递给std::logical_and<bool>

于 2012-04-23T16:46:55.613 回答