模板 class 特定于类型的函数

Template class type-specific functions

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

template <typename T> List

它有这个内部函数 print

public:
void Print();

如您所料,它从头到尾打印列表内容; 但是,由于模板可以将 classes 作为 T,可以想象,对于这种情况,我将需要不同的 Print() 实现。比如我还有一个class点

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

您使用 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..
}

However, as template can take classes as T, one can imagine, that i would need different implementations of Print() for that very cases

完全没有。您可以为每种类型的对象实现 Print 的单一实现 - 这就是模板功能强大的原因。

一种方法是在 Point 中定义流运算符 <<,并在 List 中定义一个通用的 Print() 方法。这使得 Print 不只是 Point 可用。

更具普遍性。