2010-11-25 119 views
0

才能夠做到這一點:相同的聲明,我想兩種不同類型的

X<int> type_0; 
X<int> type_1; 

,我想對於type_0和TYPE_1是兩個不同的類型。我該怎麼做?

+0

您可以...使用不同的類型?或者,我在這裏錯過了什麼? – 2010-11-25 09:16:47

+0

你的意思是`typedef X type_0;`? – kennytm 2010-11-25 09:17:14

+0

@Mike和Kenny沒有人,我希望這個類模板(X)以某種方式聲明每個具有相同參數的實例創建新類型。 – 2010-11-25 09:20:23

回答

1

你可以使用序號標籤:

template <typename T, int Tag> class X { ... }; 

typedef X<int, 0> type_0; 
typedef X<int, 1> type_1; 

或者,你可以使用繼承:

class type_0 : X<int> { ... }; 
class type_1 : X<int> { ... }; 

但是從一些困難這個受苦,如需要轉發構造函數的參數和危害與混合賦值語義和繼承。

+0

謝謝,看我對lijie的回答 – 2010-11-25 09:23:18

+0

@There ...:那麼繼承解決方案可能是你唯一的選擇。 – 2010-11-25 09:25:16

1

您需要參數化另一件事情(例如整數?)。例如,將X定義爲template <typename T, int N> struct X {...};並使用X<int,0> type_0; X<int,1> type_1。如果模板參數匹配,它們是相同的類型。

1

做一個類,從X模板類繼承,像這樣:

template <int I> 
class type_i : public X<int> 
    { 
    }; 

typedef type_i<0> type_0; 
typedef type_i<1> type_1; 
7
template < typename T, int I > class X; 

X<int, __LINE__ > x0; 
X<int, __LINE__ > x1; 

X0和X1將是不同的類型,將任何其他聲明是這樣,如果他們不是在同一行在文件中。