多模板参数的类模板

3

我正在尝试定义同一个模板类的多个版本,每个版本都有不同的模板参数。编译器报错:

 previous declaration ‘template<class T1> class A’ used

有没有办法绕过这个问题?不幸的是,我不能使用C++11,在那里我可以分配默认模板参数。如何解决这个问题是一个好的实践?我正在使用旧的g++4.4.7。

#include <iostream>

template <class T1>
class A{};

template <class T1,class T2>
class A{};

int main() { return 0; }

Kerrek 给出了正确的答案,但是 C++11 仅向函数添加了默认模板参数类型......你可以始终编写 template <typename T1, typename T2 = void> class A { }; - Barry
2个回答

5

制作一个可变参数模板并添加部分特化:

template <typename ...> class A;      // leave primary template undefined

template <typename T> class A<T>
{
    // ...
};

template <typename T1, typename T2> class A<T1, T2>
{
    // ...
};

嗨,Kerrek。部分特化很不错!很抱歉我不能使用可变参数模板,但我喜欢这个回答。 - Abruzzo Forte e Gentile

3
如果您无法使用C++11的可变参数模板,可以使用一个“模拟”类型。
struct NoType{};

template <class T1, class T2 = NoType> // or class T2 = void, doesn't really matter
class A{};

然后根据需要进行专业化。

PS:正如@Barry在评论中提到的,C++11之前允许类的默认模板参数。C++11在这方面引入的新功能是允许函数的默认模板参数。


嗨。这很好...它旨在/适用于部分特化的使用。 - Abruzzo Forte e Gentile

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接