2016-11-21 138 views
1

好吧,所以我有这个模板类,这有点像单向列表。模板类类型特定功能

template <typename T> List 

,它有这个功能里面打印

public: 
void Print(); 

,正如你可以猜测,从王建宇,山西高等学校打印列表内容; 但是,因为模板可以将类作为T,所以可以想象,对于这种情况,我需要不同的Print()实现。例如,我有另一个类

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的模板类功能?

+0

'template <> void列表 :: Print()' – AndyG

回答

2

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

它是否在类体中?或者外面呢? –

+0

@YuryElburikh在它之外。 –

+0

现在它告诉我“列表中没有成员函数”Print“被声明在列表” –

0

然而,由于模板可以采取类如T,可以想见,我需要打印()的不同实现为非常情况下

根本不是。对于每种类型的对象,您都可以实现一个Print - 这就是为什么模板功能强大。

一种方式做你想要将是Point定义流运算符<<什么,在List有一个通用的方法Print()。这使得Print不仅仅可用于Point

更普遍ftw。

+0

嗯,这种方法我喜欢更多,但是,这个项目我不得不使用Point提供的任何修改 –