在类中使用不同的模板参数

时间:2014-07-24 02:22:10

标签: c++ templates

对于类的不同功能,模板的参数是否允许不同?例如,如果我有一个班级:

template <class T, class Comparator>
class example {
public: 
void shift(std::vector<T>& a, T low, T, high);
void heapSort(std::vector<T>& a, T size, Comparator comp);
};

我被允许这样做:

template <class T>
void example::shift(std::vector<T>& a, T low, T, high)

template <class T, class Comparator>
void example::heapSort(std::vector<T>& a, T size, Comparator comp)

因为移位功能不需要比较器类型?

3 个答案:

答案 0 :(得分:1)

是的,您只需要使用heapSort模板参数设置Comparator模板函数:

template <class T>
class example {
public:
    void shift(std::vector<T>& a, T low, T high);

    template <class Comparator>
    void heapSort(std::vector<T>& a, T size, Comparator comp);
};

template <class T>
void example<T>::shift(std::vector<T>& a, T low, T high) {
    // ...
}

template <class T>
template <class Comparator>
void example<T>::heapSort(std::vector<T>& a, T size, Comparator comp) {
    // ...
}

请注意heapSort的定义有两条template行 - 一行用于类,一行用于函数。它是模板中的模板。

答案 1 :(得分:0)

您不能这样做,因为您的函数可能访问类成员,这些可能取决于模板参数。对于未使用的参数,您可以使用较短的名称,或者甚至可以省略其名称,只留下“class”。

答案 2 :(得分:0)

我猜你真正想要的是:

template <class T, class Comp1>
class example {
public: 
    void shift(std::vector<T>& a, T low, T, high); // uses Comp1

    template<class Comp2>
    void heapSort(std::vector<T>& a, T size, Comp2 comp);
};