码迷,mamicode.com
首页 > 其他好文 > 详细

模板参数tag的用法

时间:2014-05-14 19:33:42      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:c++   模板参数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;
}


模板参数tag的用法,布布扣,bubuko.com

模板参数tag的用法

标签:c++   模板参数tag用法   

原文地址:http://blog.csdn.net/davidsu33/article/details/25782317

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!