使用模板可以完成很多看起來很不可思議的事情,比如下面這個,可以在編譯時實現靜態類型判斷
#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;
}
}
從這裡可以看到,模板基本上就是將你所需要的所有情況都定義一次,然後讓編譯器來選擇哪個適用。