好的,所以我有这个模板类,有点像单向列表。
template <typename T> List
它有内部功能打印
public:
void Print();
,正如您所猜测的那样,从开始到结束打印列表内容; 但是,由于模板可以将类作为T,可以想象,对于这种情况,我需要不同的Print()实现。例如,我有另一个类Point
class Point{
private:
int x, y;
public:
int getX();
int getY();
}
所以我想要专为Points设计的Print。我试过这个:
void List<Point>::Print();
但是编译器告诉我
prototype for void List<Point> Print() doesn match any in class List<Point>
虽然
candidates are: from List<T> [with T = Point] void List<Point>::Print()
对我来说,它似乎是同样的功能。怎么了?我如何编写特定于T的模板类函数?
答案 0 :(得分:4)
您使用explicit template specialization专门针对特定类型的Print
行为。
例如,对于Point
:
template <> // No template arguments here !
void List<Point>::Print() // explicitly name what type to specialize
{
//code for specific Point Print behaviour..
}
答案 1 :(得分:0)
但是,由于模板可以将类作为T,可以想象,对于这种情况我需要不同的Print()实现
完全没有。对于每种类型的对象,您都可以使用Print
的单个实现 - 这就是模板功能强大的原因。
执行所需操作的一种方法是在<<
中定义流运算符Point
,并在Print()
中使用通用List
方法。这使得Print
可用于Point
以上。
更多普遍性ftw。