利用模板在编译时决定一个变量的类型

来源:岁月联盟 编辑:猪蛋儿 时间:2011-12-24

使用模板可以完成很多看起来很不可思议的事情,比如下面这个,可以在编译时实现静态类型判断

 

#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; 
        } 
 

从这里可以看到,模板基本上就是将你所需要的所有情况都定义一次,然后让编译器来选择哪个适用。


摘自 无心云

图片内容