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))
);
根据我的理解,T
的传入类型std::logical_and<T>
是函数operator()
的传入参数的类型。鉴于上述代码,似乎std::greater
的类型bool
由operator()
的返回值确定。
这是对的吗?
谢谢
答案 0 :(得分:2)
operator()
函数的返回类型是bool。的类型
std::greater
是std::greater
。这是一个功能对象。因此:
std::greater<int> g;
std::cout << typeof( g ).name() << std::endl;
将返回编译器用于显示实例化的任何内容
类模板:VC ++的"struct std::greater<int>"
,用于
例。
答案 1 :(得分:1)
增强活页夹比你想象的更有魔力。当其中一个绑定参数本身是绑定表达式时,它将在调用期间执行该表达式并使用结果。在这种情况下,内部绑定表达式是对std::less<int>
和std::greater<int>
的调用,两者都产生bool
,然后传递给std::logical_and<bool>
。