c++ - 这是类模板的全部或部分特化吗?

标签 c++ class templates 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();
};

我刚刚开始学习完整和部分模板特化,这让我有点困惑。一般来说,我会说这是一个完整的模板特化,因为参数 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/

相关文章:

php - 在 PHP 中是否有动态扩展类的选项?

c# - RIA 服务中的 Silverlight 共享类导致构建错误 - 类型 'X' 已包含 'Y' 的定义

c++ - 在 Visual Studio 中使用内联变量

c++ - 将成员函数更改为 const 静默破坏代码

python - 为什么快速调用 Python 类的 id 不是唯一的?

azure - 为 key 保管库的 virtualNetworkRules 添加 ARM 模板

C++运算符重载解析歧义

c++ - 如何使用非类型模板参数传入指向数组的指针?

c++ - C++中的私有(private)虚方法

c++ - 运行 OpenCV_Sample 的 stereo_match.cpp