结论:template<>告诉编译器遵循模板特化,特别是完全特化
通常,class A看起来像这样:
template<class T>
class A{
// general implementation
};
template<class T> 表示类型模板
如果template<>
中不添加类型,则表示是完全特化,此时的写法应该是:
template<>
class A<int>{
// special implementation for ints
};
通过这种方式,无论何时使用A<int>
都使用专用版本。你还可以使用它来专门化功能,如:
template<class T>
void foo(T t){
// general
}
template<>
void foo<int>(int i){
// for ints
}
// doesn't actually need the <int>
// as the specialization can be deduced from the parameter type
template<>
void foo(int i){
// also valid
}
通常,您不应该专门化函数,因为简单的重载通常被认为是更好的方式:
void foo(int i){
// better
}
现在,为了使其成功,以下是部分专业化:
template<class T1, class T2>
class B{
};
template<class T1>
class B<T1, int>{
};
工作方式作为一个完整的专业化相同,只是专业版何时使用,第二个模板参数是一个int(如B<bool,int>,B<YourType,int>
等).