template在不同的编译器,支持会不一样,会给代码的可移植性带来很多问题。
windows:
template<class T>
void fun(T t)
{
std::cout<<"Do nothing"<<std::endl;
};
template<> //specialize模板特化,如果没有这个,则下面函数是普通函数申明
void fun(int)
{
std::cout<<"int"<<std::endl;
}
int i = 1;
fun<int>(i); //"int"
fun(i); //"int"
non-type模版参数不能为double,只能是int类型兼容的,如enum,char
类型提取,是利用模板的特化,使某些不能是用的类型无定义,从而在编译阶段就出错了,如:
template<class T>
struct Support{ };
template<>
struct Support<int>; // not implement
template<>
struct Support<double>{ };
…
Support<int>; // error
Support<double>; // OK
Support<char>; // OK