2012-12-28 93 views
1

我有一個模板類,並希望建立一個模板方法用相同的模板類型的類,它喜歡如下模板方法具有相同的模板類型

template<class T> 
class A 
{ 
public: 
    void Set<T>(const T& t) {...} // I think this is wrong. 

... 
}; 


A<int> a; 
a.Set<int>(10); 

如何使它工作?非常感謝!

+2

你不需要做任何特殊。只需使用T:'void Set(const T&t){}'。 T將是你的類實例化的任何類型。並正常使用它:'A a; a.Set(10);' – jrok

回答

3

你不需要做任何特別的事情。在A內,還定義了T,其中包括Set的定義。所以,你會只是說:

template< class T > 
class A 
{ 
public: 
    void Set(const T& t) {...} 
}; 

如果你想模板Set一樣,所以不同類型的可以用它來使用,你會做:

template< class T > 
class A 
{ 
public: 
    template< typename U > void Set(const U& u) {...} 
}; 

最後請注意,有時打電話時一個模板函數您不需要聲明其模板參數明確。他們將從您用來調用它們的參數的類型中推導出推斷爲即,

template< typename T > void Set(const T& t) {...} 

Set(4) // T deduced as int 
Set('0') // T deduced as char 
Set<int>('0') // T explicitly set to int, standard conversion from char to int applies 
+0

而不是不同的名稱,即T和U我已經給出了相同的名稱,即T和T(代替U)。但是我得到編譯時錯誤。這是什麼原因,請幫助。 – cryptomanic

2

如果你的意思是成員模板:

template<class T> 
class A 
{ 
public: 
    template <typename U> void Set(const U& u) {...} 
}; 
相關問題