模板

时间:2018-03-18 14:28:52

标签: 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]; 
};

我想知道这些是两种不同的定义类的方法,还是它们有不同的含义?

2 个答案:

答案 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

Live example

答案 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;