我有两个以不同方式定义的类,如下所示:
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];
};
我想知道这些是两种不同的定义类的方法,还是它们有不同的含义?
答案 0 :(得分:1)
第二个版本具有默认模板参数值int
。换句话说,在创建对象T
时不一定需要指定Stack
。
Stack s; // Ok. Internal array will be 'int data[100]'.
Stack<double> s2; // Template parameter overrides default value, i.e. 'double data[100]'.
对于第一个版本,上述内容无法编译,因为需要指定T
。
答案 1 :(得分:1)
您的第一个Stack
类没有第一个模板参数的默认值:
template<class T, size_t N = 100>
使用此课程,您可以像这样声明Stack
:
Stack<int> stack; // You have to provide at least 1 template parameter
Stack<int, 50> stack;
第二个Stack
类的第一个模板参数的默认值为int
:
template<class T = int, size_t N = 100>
使用此Stack
课程,您可以像这样声明Stack
:
Stack<> stack; // You can declare a Stack with no template parameters
Stack stack; // The same, but C++17-only
Stack<int> stack;
Stack<int, 50> stack;