我有两个以不同方式定义的类,如下所示:
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];
};
我想知道这是定义类的两种不同方法,还是它们具有不同的含义?
最佳答案
您的第一个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;