我有一個模板類,並希望建立一個模板方法用相同的模板類型的類,它喜歡如下模板方法具有相同的模板類型
template<class T>
class A
{
public:
void Set<T>(const T& t) {...} // I think this is wrong.
...
};
A<int> a;
a.Set<int>(10);
如何使它工作?非常感謝!
我有一個模板類,並希望建立一個模板方法用相同的模板類型的類,它喜歡如下模板方法具有相同的模板類型
template<class T>
class A
{
public:
void Set<T>(const T& t) {...} // I think this is wrong.
...
};
A<int> a;
a.Set<int>(10);
如何使它工作?非常感謝!
你不需要做任何特別的事情。在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
而不是不同的名稱,即T和U我已經給出了相同的名稱,即T和T(代替U)。但是我得到編譯時錯誤。這是什麼原因,請幫助。 – cryptomanic
如果你的意思是成員模板:
template<class T>
class A
{
public:
template <typename U> void Set(const U& u) {...}
};
你不需要做任何特殊。只需使用T:'void Set(const T&t){}'。 T將是你的類實例化的任何類型。並正常使用它:'A a; a.Set(10);' –
jrok