0

我遇到了以下模板功能,

template<typename C, typename F = less<typename C::value_type>> void Sort(C& c, F f = F()){
    sort(C.begin(),c.end(),f);
}

现在,我在less中寻找,它表明,

二进制函数对象类,其调用返回其第一个参数的比较是否小于第二个(由运算符 < 返回)。

在上述功能中,less 有什么用?它只有一个论点。

谢谢。

4

2 回答 2

4

less,没有 1 个论点。它有 1 个模板参数。这与 1 参数不同。它也是一个类而不是一个函数。更准确地说,它是一个functor具有重载()运算符的类,因此它可以用作函数。

考虑这样的实现

template<class T>
struct less 
{   
    bool operator()(const T& left, const T& right) const
    {
        return (left < right);
    }
};

less<int>可以称为

less<int> f;
f(a,b);

其中 a 和 b 是ints。

所以有一个模板参数(T == int),但有两个参数(int left & int right)。

于 2013-10-29T07:08:52.900 回答
2

少有什么用?它只有一个论点。

不,它只有一个模板参数。实际的函数调用本身有两个参数,两个参数(const 引用 IIRC)都是模板参数中指定的类型。

于 2013-10-29T07:11:56.610 回答