我希望能够做到这一点:
X<int> type_0;
X<int> type_1;
我希望type_0和type_1是两种不同的类型。我该怎么办?
答案 0 :(得分:7)
template < typename T, int I > class X;
X<int, __LINE__ > x0;
X<int, __LINE__ > x1;
x0和x1将是不同的类型,如果它们不在文件的同一行,则会像这样的任何其他声明。
答案 1 :(得分:1)
您可以使用序数标签:
template <typename T, int Tag> class X { ... };
typedef X<int, 0> type_0;
typedef X<int, 1> type_1;
或者,您可以使用继承:
class type_0 : X<int> { ... };
class type_1 : X<int> { ... };
但是这会遇到一些困难,例如需要使用混合赋值语义和继承来转发构造函数参数和危险。
答案 2 :(得分:1)
你需要对另一件事进行参数化(例如整数?)。例如,将X
定义为template <typename T, int N> struct X {...};
并使用X<int,0> type_0; X<int,1> type_1
。如果模板参数匹配,则它们是相同的类型。
答案 3 :(得分:1)
创建一个继承自X模板类的类,如下所示:
template <int I>
class type_i : public X<int>
{
};
typedef type_i<0> type_0;
typedef type_i<1> type_1;