Tra*_*cer 2 c++ templates class template-specialization
在以下示例中:
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();
};
Run Code Online (Sandbox Code Playgroud)
我刚刚开始学习完整和部分模板专业化,这让我有点困惑。一般来说,我会说这是一个完整的模板专业化,因为参数 T 被定义为 double 并且没有留下其他形式参数。但是,我不确定参数n在这里是否有任何区别?
是的,它不是一个完整的专业化,直到模板参数列表中的所有参数都被专业化/指定,例如
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> {
....
Run Code Online (Sandbox Code Playgroud)
模板参数是类型还是非类型并不重要,如果您不专门化列表中的所有参数,您将不会拥有完整的专门化。