我试图在多个版本中定义相同的模板类,每个版本都有不同的模板参数。编译器给我错误
previous declaration ‘template<class T1> class A’ used
有没有办法规避这个问题?不幸的是我无法使用Cx ++ 11,我可以在其中分配默认模板参数。解决这个问题的好方法是什么? 我正在使用旧的g ++ 4.4.7
#include <iostream>
template <class T1>
class A{};
template <class T1,class T2>
class A{};
int main() { return 0; }
答案 0 :(得分:5)
制作一个可变参数模板并添加部分特化:
template <typename ...> class A; // leave primary template undefined
template <typename T> class A<T>
{
// ...
};
template <typename T1, typename T2> class A<T1, T2>
{
// ...
};
答案 1 :(得分:3)
如果你不能使用C ++ 11可变参数模板,你可以使用&#34; mock&#34;型
struct NoType{};
template <class T1, class T2 = NoType> // or class T2 = void, doesn't really matter
class A{};
然后根据需要对其进行专门化。
PS:正如@Barry在评论中提到的那样,在C ++ 11之前,类的默认模板参数是允许的。 C ++ 11引入的这方面的新颖性是允许函数中的默认模板参数。