【问题标题】:Is this full or partial specialization of class template?这是类模板的全部或部分专业化吗?
【发布时间】:2014-10-08 02:52:33
【问题描述】:

在以下示例中:

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 在这里是否有什么不同?

【问题讨论】:

  • 是的,在模板参数列表中的所有参数都被专门化/指定之前,它不是一个完整的专门化
  • 如果是类型,则为全特化;如果是模板,则为部分特化。
  • 那么,如果我删除 int n 那么这将是一个完整的模板专业化?
  • 部分。提示,完全特化看起来像template &lt;&gt;,即所有参数都已特化。

标签: c++ class templates template-specialization


【解决方案1】:

是的,直到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> {
....

模板参数是类型还是非类型都没有关系,如果你不特化列表中的所有参数,你就不会有完整的特化。

【讨论】:

    【解决方案2】:

    除非所有模板参数都已被特化,否则它不是完全特化。

    template &lt;&gt; 介绍了完整的专业化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      • 2015-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多