//函数模板的全特化和偏特化
#include <stdio.h>
#include <iostream>
template<typename T1,typename T2>
void f(T1 a1, T2 a2) {
std::cout << "function template" << std::endl;
std::cout << a1 << std::endl;
std::cout << a2 << std::endl;
}
template <>
void f<double,double>(double c1, double c2) {
std::cout << "函数模板全特化" << std::endl;
std::cout << c1 << std::endl;
std::cout << c2 << std::endl;
}
template<typename T>
void f(T t1, float t2) {
std::cout << "函数模板重载偏特化" << std::endl;
std::cout << t1 << std::endl;
std::cout << t2 << std::endl;
}
//函数重载的优先级高于模板特化的优先级
//void f(double a1, double a2) {
// std::cout << "函数重载" << std::endl;
// std::cout << a1 << std::endl;
// std::cout << a2 << std::endl;
//}
void f(int a1, int a2) {
std::cout << "函数重载" << std::endl;
std::cout << a1 << std::endl;
std::cout << a2 << std::endl;
}
int main() {
int a1, a2;
float c1;
double d1 = 0.5;
a1 = 10;
a2 = 30;
c1 = 0.5f;
f(a1, a2); //调用重载函数
f(a1, c1); //调用重载偏特化函数
f(d1, d1); //调用函数全特化函数
f(d1, c1); //调用重载偏特化函数 (优先级:重载>全特化>模板)
f(a1, d1); //调用函数模板
return 0;
}函数模板全特化与特殊的偏特化
函数模板特化详解
最新推荐文章于 2025-10-20 22:54:21 发布
本文通过具体示例详细介绍了函数模板的全特化与偏特化,并展示了函数重载与模板特化之间的优先级关系。文章包括了不同情况下函数调用的实际行为,有助于读者深入理解C++模板特化的应用。
5828

被折叠的 条评论
为什么被折叠?



