首页 > 代码库 > 模板参数tag的用法
模板参数tag的用法
//通过结构体/类的类型来作为模板参数的tag, //用来区分tag之间的区别。 //made by davidsu33 //例如对于某个全局的静态变量,你如果希望有 //很多份,但是其实现又是一样的,你可以考虑 //以模板的形式,通过类tag来区分 //而且还可以根据实际需要来特化模板 #include "stdafx.h" #include <iostream> #include <cassert> using namespace std; template<class Tag> class Instance; template<class Tag> class Instance { public: ~Instance(){}; static Instance &getInstance() { static Instance s_instance; return s_instance; } void doOne() { cout<<"do One"<<endl; } void doTwo() { cout<<"do Two"<<endl; } private: Instance(){}; Instance& operator=(const Instance&); Instance(const Instance&); }; struct TagOne{}; struct TagTwo{}; struct TagThree{}; typedef Instance<TagOne> InstanceOne; typedef Instance<TagTwo> InstanceTwo; template<> class Instance<TagThree> { public: void doOne() { cout<<"do Three"<<endl; } void doTwo() { cout<<"do Three"<<endl; } }; void test_instance() { InstanceOne &one = InstanceOne::getInstance(); InstanceTwo &two = InstanceTwo::getInstance(); void* ptrOne = static_cast<void*>(&one); void *ptrTwo = static_cast<void*>(&two); assert(ptrOne != ptrTwo); Instance<TagThree> three1, three2, three; three.doOne(); three.doTwo(); } int _tmain(int argc, _TCHAR* argv[]) { test_instance(); getchar(); return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。