C++ 带模板的类声明
我有两个以不同方式定义的类,如下所示:C++ 带模板的类声明,c++,templates,C++,Templates,我有两个以不同方式定义的类,如下所示: template<class T, size_t N = 100> class Stack { T data[N]; }; template<class T = int, size_t N = 100> // Both defaulted class Stack { T data[N]; }; 模板类堆栈{ T数据[N]; }; 模板//都是默认的 类堆栈{ T数据[N]; }; 我想知道这是定义类的两种不同方法,还
template<class T, size_t N = 100> class Stack {
T data[N];
};
template<class T = int, size_t N = 100> // Both defaulted
class Stack {
T data[N];
};
模板类堆栈{
T数据[N];
};
模板//都是默认的
类堆栈{
T数据[N];
};
我想知道这是定义类的两种不同方法,还是它们有不同的含义?第二个版本有一个默认的模板参数值
int
。换句话说,在创建对象堆栈时,不一定需要指定T
Stack s; // Ok. Internal array will be 'int data[100]'.
Stack<double> s2; // Template parameter overrides default value, i.e. 'double data[100]'.
Stack s;//好啊内部数组将为“int data[100]”。
堆栈s2;//模板参数覆盖默认值,即“双数据[100]”。
在第一个版本中,由于需要指定t
,因此无法编译上述内容
您的第一个堆栈
类没有第一个模板参数的默认值:
template<class T, size_t N = 100>
template<class T = int, size_t N = 100>
第二个堆栈
类的第一个模板参数的默认值为int
:
template<class T, size_t N = 100>
template<class T = int, size_t N = 100>
只需删除第一个版本的模板类堆栈
,第二个版本适用于两种情况:堆栈
和堆栈
都可以。您不需要第一个模板版本,因为第二个版本都有默认值。堆栈
使用clang++
给出此错误:错误:使用类模板“Stack”需要模板参数
您需要空的尖括号(Stack
)@考えネロク 不需要。不需要。@Snps-非常确定在C++17之前您需要空的尖括号。戈德博尔特同意:@StephenNewell好吧,C++17已经发布,是当前的标准。