2016-11-21 116 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提供的任何修改 –