您的位置:首页 > 其它

带注册功能的单件(Singleton)模式的C++实现

2012-10-20 16:06 477 查看

带注册功能的单件(Singleton)模式的C++实现



#include <iostream>

#include <string>

#include <map>

using namespace std;

class Singleton

{

public:

static void Register(string pName, Singleton* pItem);

static Singleton* Instance(string pName);

protected:

Singleton(){}

virtual ~Singleton(){}

private:

static map<string, Singleton* > m_Map;

};

map<string, Singleton* > Singleton::m_Map;

void Singleton::Register(string pName, Singleton* pItem)

{

m_Map.insert(make_pair(pName,pItem));

}

Singleton* Singleton::Instance(string pName)

{

Singleton* pItem = NULL;

map<string, Singleton* >::const_iterator iter = m_Map.begin();

while ( (iter!= m_Map.end()) && ( (*iter).first != pName) )

{

iter++;

}

if (iter != m_Map.end())

{

pItem = (*iter).second;

}

return pItem;

}

template<class Type>

class ConSingleton :public Singleton

{

public:

ConSingleton(string pName)

{

Register(pName, this);

m_strName = pName;

};

virtual ~ConSingleton(){};

void prt()

{

cout << m_strName <<endl;

}

private:

string m_strName;

};

int main()

{

ConSingleton<int>* pConSingleton = new ConSingleton<int>("wang");

ConSingleton<int>* p = (ConSingleton<int>*) Singleton::Instance("wang");

p->prt();

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: