类模板显式特化和局部特化通常用于生成主类模板的一些版本,这些版本根据具体的模板模板实参或模板实参的类定制而成。
然而,这些语言特性常常也被以相反的样式使用,即,不是基于类型的属性生成特化版本,而是从一个特化版本中推导出类型的属性。
例:
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;
}