5

好的,所以我有这个模板类,它有点像单向列表。

template <typename T> List

它有这个内部功能打印

public:
void Print();

你可以猜到,它从头到尾打印列表内容;但是,由于模板可以将类作为 T,可以想象,对于这种情况,我需要不同的 Print() 实现。例如,我有另一个类 Point

class Point{
 private:
  int x, y;
 public:
  int getX();
  int getY();
}

所以我想要专门为点设计的打印。我试过这个:

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 的模板类函数?

4

2 回答 2

7

您使用显式模板专业化来专门化Print特定类型的行为。

例如,对于Point

template <> // No template arguments here !
void List<Point>::Print() // explicitly name what type to specialize
{
  //code for specific Point Print behaviour..
}
于 2016-11-21T14:14:05.983 回答
0

但是,由于模板可以将类作为 T,可以想象,对于这种情况,我需要不同的 Print() 实现

一点也不。您可以对每种类型的对象都有一个实现Print——这就是模板强大的原因。

做你想做的一种方法是在 中定义流运算符<<PointPrint()List. 这使得Print可用的不仅仅是Point.

更通用的ftw。

于 2016-11-21T14:57:02.117 回答