具有多个模板参数的类模板

时间:2014-11-21 18:03:59

标签: c++ templates

我试图在多个版本中定义相同的模板类,每个版本都有不同的模板参数。编译器给我错误

 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; }

2 个答案:

答案 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引入的这方面的新颖性是允许函数中的默认模板参数。