//函数模板的全特化和偏特化
#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;
}
函数模板全特化与特殊的偏特化
最新推荐文章于 2024-05-05 15:26:08 发布