以下代码中的<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);
}
答案 0 :(得分:3)
模板化类型已在函数参数中指定,可由编译器推导出
template<>
void debugRep2<const char*>(const char* const& t) {
// ^^^^^^^^^^^ already present
// ...
}
所以是的,在这种情况下它是可选的。
实际上,编写该专业化的常用方法是
template<>
void debugRep2(const char* const& t) {
// ...
}