c++ - 函数模板特化类型——它是可选的吗?

标签 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);
}

最佳答案

模板类型已经在函数参数中指定,可以由编译器推断

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

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


事实上,编写该特化的常见方式是

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

关于c++ - 函数模板特化类型——它是可选的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38803903/

相关文章:

android - openfl - 音频不适用于 cpp 目标

c++ - 将 X 坐标从一种分辨率转换为另一种分辨率

c++ - 特定模板参数的模板断点

java - 速度模板 - 换行

python - 为什么即使链接在服务器上,我也会收到 "404 Not Found"错误?

c++ - Qt - 使用 QString::arg 将文本对齐到列中

C++ 域特定的嵌入式语言运算符

c# - C# 有类似于 C++ std::equal_range 的东西吗?

c++ - SFML: Vector2<double> 无法编译

c++如何从派生类调用派生类中重载的模板类函数?