使用模板可以完成很多看起来很不可思议的事情,比如下面这个,可以在编译时实现静态类型判断
#include <string>
#include <iostream>
template<typename T>
class TypeChecker;
template<> class TypeChecker<std::string>
{
public:
static const int TYPE = 1;
};
template<> class TypeChecker<const char*>
{
public:
static const int TYPE = 2;
};
template<> class TypeChecker<char*>
{
public:
static const int TYPE = 3;
};
int main()
{
std::string dummy = "";
if(TypeChecker<typeof(dummy)>::TYPE == 1)
{
std::cout << "std::string" << std::endl;
}
char* data = "";
if(!TypeChecker<typeof(data)>::TYPE == 2)
{
std::cout << "const char*" << std::endl;
}
}
从这里可以看到,模板基本上就是将你所需要的所有情况都定义一次,然后让编译器来选择哪个适用。