没有参数的模板类是什么意思?例如,让我们拿一个计算阶乘的模板类,其模板参数在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>,但是必须小心是否使用它.
也是一个例子.该节目对类模板和函数模板的模板特化的一些最小使用.