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

Ash*_*tti 4 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(){}
};
Run Code Online (Sandbox Code Playgroud)

template <typename T, std::size_t SZ>
struct MyClass<T (&)[SZ]>{
    static void print(){}
};
Run Code Online (Sandbox Code Playgroud)

都是主模板的部分专业化

template <typename T>
struct MyClass;
Run Code Online (Sandbox Code Playgroud)

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

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

Rei*_*ica 5

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

template <class T>
struct function;

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