是否允许部分专业化具有比主要模板更多的模板参数?我的理解是,部分专业化必须具有与主要模板相比更少或相同数量的模板参数。
我正在阅读C ++模板(第二版),在5.4节(第72页)中提到了
template <typename T, std::size_t SZ>
struct MyClass<T[SZ]>{
static void print(){}
};
和
template <typename T, std::size_t SZ>
struct MyClass<T (&)[SZ]>{
static void print(){}
};
都是主模板的部分专业化
template <typename T>
struct MyClass;
附带的代码可以正常工作。但这是正确的吗?局部专业化可以具有比主要模板更多的模板参数吗?
编辑-该问题被标记为另一个问题的重复,但是此处的答案与该问题无关。这里的问题是关于模板参数和注释的数量,快速重新阅读该标准为我澄清了答案。
答案 0 :(得分:5)
是的,部分专业化确实可以比主要模板具有更多的模板参数。这种用法的典型示例是std::function
:
template <class T>
struct function;
template <class R, class... A>
struct function<R (A...)>
{
// std::function as we know it
};