我有一个模板类,并希望建立一个模板方法用相同的模板类型的类,它喜欢如下模板方法具有相同的模板类型
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