8

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

基本上,这是类:

template <int N> class Factorial
{
public:
    enum {fact = N * Factorial<N-1>::fact};
};

但是,我发现这个类有一个“扩展类”,

template<> class Factorial<1>
{
public:
    enum {fact = 1};
};

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

提前致谢。

4

1 回答 1

15

template<> class Factorial<1>
{
public:
    enum {fact = 1};
};

实际上是类模板的模板完全化或显式特Factorial化。还有一种叫做模板化的东西。两者都是模板专业化的形式。

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

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

template <int N> class Factorial
{
public:
    enum {fact = N * Factorial<N-1>::fact};
};

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

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

但是当你实例化/使用

Factorial<1>

Factorial<1>而是使用模板特化。换句话说,它是一种特殊情况,只要您1作为模板参数提供,就会使用它。

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

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

于 2013-08-01T03:53:38.640 回答