Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <typeinfo>
- using namespace std;
- template <class T>
- class Singleton
- {
- public:
- static T* Instance() {
- if(!m_pInstance) m_pInstance = new T;
- return m_pInstance;
- }
- protected:
- Singleton();
- ~Singleton();
- private:
- Singleton(Singleton const&);
- Singleton& operator=(Singleton const&);
- static T* m_pInstance;
- };
- template <class T> T* Singleton<T>::m_pInstance = NULL;
- class Logger
- {
- private:
- string log;
- public:
- Logger() {log = "0";};
- ~Logger() {};
- string getLog() {return log;};
- void setLog(string l) {log = l;};
- };
- class TypeGeneric {};
- class TypeZero : public TypeGeneric {};
- class TypeOne : public TypeGeneric {};
- TypeGeneric* factory()
- {
- string s = Singleton<Logger>::Instance()->getLog();
- if(s == "0")
- return new TypeZero;
- if(s == "1")
- return new TypeOne;
- return NULL;
- }
- template <class T>
- class list
- {
- private:
- T* next;
- public:
- T* getNext() {return next;};
- };
- int main()
- {
- Singleton<Logger>::Instance()->setLog("1");
- cout << Singleton<Logger>::Instance()->getLog() << endl;
- cout << factory() << endl;
- return 0;
- }
Add Comment
Please, Sign In to add comment