类模板显式特化和局部特化通常用于生成主类模板的一些版本,这些版本根据具体的模板模板实参或模板实参的类定制而成。
然而,这些语言特性常常也被以相反的样式使用,即,不是基于类型的属性生成特化版本,而是从一个特化版本中推导出类型的属性。
例:
template<class T>struct IsInt //T 不是一个 int{ enum { result = false };};
template<>struct IsInt<int> //除非T 是一个int{ enum {result = true};};
template<typename X>void Test(const X &arg){ if (IsInt<X>::result) std::cout<<arg<<"is integer/n"; else std::cout<<arg<<"is not integer"<<"/n";}
int _tmain(int argc, _TCHAR* argv[]){
int a = 10; Test<int>(a); system("pause"); return 0;}