在以下示例中:
template <class T, int n>
class MyContainer{
public:
T myArray[size];
int size;
MyContainer() : size(n){}
};
// full or partial specialization?
template <int n>
class MyContainer <double, n>{
public:
double myArray[n];
int size;
MyContainer() : size(n){}
double sum();
double average();
};
我刚刚开始学习完整和部分模板特化,这让我有点困惑。一般来说,我会说这是一个完整的模板特化,因为参数 T 被定义为 double 并且没有留下其他形式参数。但是,我不确定参数 n 在这里是否有任何区别?
最佳答案
是的,它不是一个完整的特化,直到 template parameter list 中的所有参数都得到了满足。已被专门化/指定,例如
template <>
class MyContainer <double, 4> { // Full specialization
....
template <int n>
class MyContainer <double, n> { // Partial specialization
....
template <class T, int n> // Partial specialization (adds something to the base template parameter list: '*')
class MyContainer<T*,n> {
....
模板参数是类型还是非类型并不重要,如果您不专门化列表中的所有参数,您将不会拥有完整的专门化。
关于c++ - 这是类模板的全部或部分特化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25308303/