功能模板专业化类型 - 是可选的吗?

时间:2016-08-06 11:42:23

标签: c++ templates

以下代码中的<const char*>是否可选?我发现g ++和clang编译没有它就好了。

template<typename T>
void debugRep2(T const& t) {
  std::cout << "debugRep(const T& t)\n";
}

template<>
void debugRep2<const char*>(const char* const& t) {
            //^^^^^^^^^^^^^
  std::cout << "const char*& t\n";
}

int main() {
  int n;
  int *pn = &n;
  debugRep2(n);
  debugRep2(pn);
}

1 个答案:

答案 0 :(得分:3)

模板化类型已在函数参数中指定,可由编译器推导出

template<>
void debugRep2<const char*>(const char* const& t) {
                         // ^^^^^^^^^^^ already present
    // ...
}

所以是的,在这种情况下它是可选的。

实际上,编写该专业化的常用方法是

template<>
void debugRep2(const char* const& t) {
    // ...
}