没有参数的模板类,`template <>`是什么意思?

Bil*_*lie 7 c++ templates

没有参数的模板类是什么意思?例如,让我们拿一个计算阶乘的模板类,其模板参数在N - 中N!.

基本上,这是班级:

template <int N> class Factorial
{
public:
    enum {fact = N * Factorial<N-1>::fact};
};
Run Code Online (Sandbox Code Playgroud)

但是,我发现这个班有一个"扩展课",

template<> class Factorial<1>
{
public:
    enum {fact = 1};
};
Run Code Online (Sandbox Code Playgroud)

在这里我的问题是:没有参数的模板是什么template<>意思?

提前致谢.

Mar*_*cia 13

这个

template<> class Factorial<1>
{
public:
    enum {fact = 1};
};
Run Code Online (Sandbox Code Playgroud)

实际上是一个模板完全特化显式特类模板Factorial.还有一些所谓的模板特化.两者都是模板专业化的形式.

模板特化是一种特殊情况,当您使用模板特化指示的参数实例化模板时,将使用该特定模板特化,而不是原始模板.

在您的代码中,原始Factorial模板类

template <int N> class Factorial
{
public:
    enum {fact = N * Factorial<N-1>::fact};
};
Run Code Online (Sandbox Code Playgroud)

在实例化时使用,例如,以下内容:

  • Factorial<3>
  • Factorial<5>
  • Factorial<42>

但是当你实例化/使用时

Factorial<1>
Run Code Online (Sandbox Code Playgroud)

Factorial<1>而是使用模板特化.换句话说,只要您提供1模板参数,就会使用它.

模板专业化的一个值得注意的例子是std::vector<bool>,但是必须小心是否使用它.

也是一个例子.该节目对类模板和函数模板的模板特化的一些最小使用.

  • +1但我从技术上说它是第一个:) (2认同)