模板函数参数的含义是什么?

时间:2013-10-29 07:04:14

标签: c++ algorithm templates sorting c++11

我遇到过以下模板功能,

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

现在,我在less寻找,并建议,

  

二进制函数对象类,其调用返回其是否为第一个   argument比较小于第二个(由运算符&lt;返回)。

在上面提到的功能中使用的是什么?它只有一个论点。

感谢。

2 个答案:

答案 0 :(得分: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为int s。

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

答案 1 :(得分:2)

  

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

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