没有模板化参数的函数模板专用化
Function template specialization without templated argument
让我们看看一个模板函数,它接受void参数并返回void:
template<class T>
void f() {
cout << "template" << endl;
}
稍后我们专门研究这个功能:
template<>
void f<int> () {
cout << "int" << endl;
}
template<>
void f<double> () {
cout << "double" << endl;
}
int main() {
f<int> ();
f<double> ();
}
问题是为什么要编译?我们有三个具有相同签名的函数:void(void)
,并且我期望它应该与多个声明决裂?
这是因为您明确说明了要使用哪个函数。由于模板参数的差异,f<int>()
无法映射到f<double>()
;即这是一个完全明确的调用。
为什么它不能工作?这是三种不同的实现,具体取决于模板参数。实例化模板时使用的每个不同值都会创建整个模板化内容的全新副本。所以在这里你做了三个函数,它们都是独一无二的,而且效果很好。
顺便说一下,符号名称将不仅仅是f
,查找C++名称篡改。
相关文章:
- 具有常量引用参数的函数模板专用化
- 如何减少函数模板专用化?
- 类成员函数的函数模板专用化
- 使用类指针重载C++命名空间函数模板专用化替代方法?
- 类和成员函数模板专用化出错
- C++ 模板化基类的函数模板专用化
- C++函数模板专用化和重载
- 函数模板专用化生成链接错误
- 视图和跨步视图以及常量噩梦的函数模板专用化
- 函数模板专用化语法聚合模板化类型
- 澄清了使用 enable_if 的成员函数模板专用化
- 带有 clang 的 MacOSX 中的函数模板专用化
- 模板化函数模板专用化
- 在C++中创建成员函数模板专用化
- C++ 中的函数模板专用化和右值引用
- 命名空间中的函数模板专用化
- 常量和非常量 gsl::span 参数的函数模板专用化
- 如何选择函数模板专用化
- C++单个构造函数模板专用化
- 这是部分函数模板专用化