根据数据类型的不同执行不同的动作,使用模板特化实现。
// 根据类型的不同执行不同的动作
// SGI STL中通过判断构造函数与析构函数,决定是调用还是简单的初始化处理,以提升效率
// 关键是如何判断这是一个简单的或基本类型元素构成的类?
#include <iostream>
using namespace std;
// 两种数据类型
class basic_type{};
class object_type{};
// 模板类
template<class T>
class type_judge
{
public:
typedef object_type is_basic_type;
};
class A;
class B;
//特化A
template<>
class type_judge<A>
{
public:
typedef basic_type is_basic_type;
};
//特化B
template<>
class type_judge<B>
{
public:
typedef object_type is_basic_type;
};
//类A与类B的声明
class A
{
public:
void print(basic_type)
{
cout<<"A is basic_type"<<endl;
}
void print(object_type)
{
cout<<"A is object_type"<<endl;
}
};
class B
{
public:
void print(basic_type)
{
cout<<"B is basic_type"<<endl;
}
void print(object_type)
{
cout<<"B is object_type"<<endl;
}
};
//统一的调用模式
int main()
{
A a;
B b;
a.print(type_judge<A>::is_basic_type() );
b.print(type_judge<B>::is_basic_type() );
return 0;
}
在模板类特化时将A对应的定义为了basic_type,B对应的定义为了object_type。