没有模板变量的模板化类型和使用此类

时间:2017-08-14 08:05:05

标签: c++ templates struct

我无法完全理解下面的C ++代码行 当T没有出现在第1行时,为什么第1行使用模板?这是否意味着当使用某种模板类型声明struct位时(如bits<float>),它只是在结构内部typdef unsigned char type;

在第2行中,这是否意味着如果我声明struct bits<const float>,它还会使用第1行对结构bits<float>进行初始化?含义就像bits<float>? 如果有人解释这段代码正在做什么或者引用我关于这个主题的一个很好的参考,我将不胜感激。

    /// Type traits for floating point bits.
    template<typename T> struct bits { typedef unsigned char type; };  // line 1
    template<typename T> struct bits<const T> : bits<T> {};  // line 2
    template<typename T> struct bits<volatile T> : bits<T> {};  // line 3
    template<typename T> struct bits<const volatile T> : bits<T> {};  // line 4

1 个答案:

答案 0 :(得分:2)

没有理由模板必须使用模板参数。未使用的参数可用于描述与模板参数本身无关的模板化类/函数/变量的不同版本。

template<int N> bool f();
template<1> bool f(){return true;};
template<0> bool f(){return false;};

在第2行中,bits<const T>继承自bits<T>。它没有初始化bits<T>的实例,而是获得它的所有部分,就好像它是它自己的一部分一样。初始化bits<const T>时发生的所有事情都是它会定义类型type,就像bits<T>一样。