具有更多模板参数的部分专业化

时间:2018-12-13 13:10:14

标签: c++ c++11 c++14 c++17

是否允许部分专业化具有比主要模板更多的模板参数?我的理解是,部分专业化必须具有与主要模板相比更少或相同数量的模板参数。

我正在阅读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;

附带的代码可以正常工作。但这是正确的吗?局部专业化可以具有比主要模板更多的模板参数吗?

编辑-该问题被标记为另一个问题的重复,但是此处的答案与该问题无关。这里的问题是关于模板参数和注释的数量,快速重新阅读该标准为我澄清了答案。

1 个答案:

答案 0 :(得分:5)

是的,部分专业化确实可以比主要模板具有更多的模板参数。这种用法的典型示例是std::function

template <class T>
struct function;

template <class R, class... A>
struct function<R (A...)>
{
  // std::function as we know it
};