对于类的不同功能,模板的参数是否允许不同?例如,如果我有一个班级:
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)
因为移位功能不需要比较器类型?
答案 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);
};