2012-12-28 46 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) {...} 
}; 
相关问题