没有参数的模板类是什么意思?例如,让我们来一个计算阶乘的模板类,其模板参数在N - N!
中。
template <int N> class Factorial
{
public:
enum {fact = N * Factorial<N-1>::fact};
};
但是,我发现这个类有一个“扩展类”,
template<> class Factorial<1>
{
public:
enum {fact = 1};
};
我的问题是:没有参数的模板template<>
是什么意思?
提前致谢。
答案 0 :(得分:13)
此
template<> class Factorial<1>
{
public:
enum {fact = 1};
};
实际上是类模板Factorial
的模板完整专业化或显式专业化。还有一些名为模板部分专业化的东西。两者都是template specialization的形式。
模板特化是一种特殊情况,当您使用模板特化指示的参数实例化模板时,将使用该特定模板特化,而不是原始模板。
在您的代码中,原始的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>
,you must be careful whether to use it or not。
Also an example。该节目对类模板和函数模板的模板特化的使用最少。