#include <iostream>
/**
* @file template.cpp
* @author luckyFang
* @date 2021-2-21
* 全特化和偏特化
* 编译器认为,对于特定的类型,如果你能对某一功能更好的实现,那么就该听你的。
*
* 全特化:
* - 对于函数模板只有全特化没有偏特化.
* - 全特化参数列表为空
* template<> xxxx
* 偏特化:
* - 函数不能偏特化, 类可以偏特化.
*
* 全特化 就是全部指定,偏特化就是局部指定。
*
* */
template<typename T,typename U>
class Printer
{
private:
/* data */
public:
void doSomeThing(T t,U u){
std::cout<<"T:"<<typeid(t).name()<<std::endl;
std::cout<<"U:"<<typeid(u).name()<<std::endl;
}
};
// 偏特化
template<typename T>
class Printer<T,bool>
{
public:
void doSomeThing(T t,T u){
std::cout<<"T:"<<typeid(t).name()<<std::endl;
std::cout<<"U:"<<typeid(u).name()<<std::endl;
std::cout<<"偏特化"<<std::endl;
}
};
template<typename T>
void sayHello(T t){
std::cout<<"编译器:我就知道你不行!"<<std::endl;
std::cout<<t<<std::endl;
}
// 全特化
template<> void sayHello<int>(int t){
std::cout<<"编译器:你行你来!"<<std::endl;
std::cout<<t<<std::endl;
}
int main(){
Printer<double,int> p1{};
Printer<const char,int> p2{};
Printer <int,bool>p3{};
p1.doSomeThing(1.2,20);
p2.doSomeThing('A',1);
p3.doSomeThing(1,true);
sayHello("a");
sayHello(1);
return 0;
}