模板类特定于类型的函数

时间:2016-11-21 14:03:58

标签: c++ class templates template-function template-classes

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

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

2 个答案:

答案 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。