link:
http://hyunity3d.tistory.com/243?category=527936
template class 정의 관련해서 보다가 사용하신 소스가 예전 버전이라,
c++11 (vs2013)에 소스에서 오류가 나는 곳을 수정했습니다.
자세한 내용은 링크를 참고하세요.
#include <stdafx.h>
#include <iostream>
#include <string>
template <typename T>
class MySingleton
{
public:
MySingleton() {}
virtual ~MySingleton() {}
// 이 멤버를 통해서만 생성이 가능합니다.
static T* GetSingleton()
{
// 아직 생성이 되어 있지 않으면 생성한다.
if (NULL == _Singleton) {
_Singleton = new T;
}
return (_Singleton);
}
static void Release()
{
delete _Singleton;
_Singleton = NULL;
}
private:
static T* _Singleton;
};
template <typename T> T* MySingleton<T>::_Singleton = NULL;
class MyObject : public MySingleton<MyObject>
{
public:
MyObject() : _nValue(10) {}
void SetValue(int Value) { _nValue = Value; }
int GetValue() { return _nValue; }
private:
int _nValue;
};
void test2()
{
MyObject* MyObj1 = MyObject::GetSingleton();
std::cout << MyObj1->GetValue() << std::endl;
MyObject* MyObj2 = MyObject::GetSingleton();
MyObj2->SetValue(20);
std::cout << MyObj1->GetValue() << std::endl;
std::cout << MyObj2->GetValue() << std::endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
return test2();
}
http://hyunity3d.tistory.com/243?category=527936
template class 정의 관련해서 보다가 사용하신 소스가 예전 버전이라,
c++11 (vs2013)에 소스에서 오류가 나는 곳을 수정했습니다.
자세한 내용은 링크를 참고하세요.
#include <stdafx.h>
#include <iostream>
#include <string>
class MySingleton
{
public:
MySingleton() {}
virtual ~MySingleton() {}
// 이 멤버를 통해서만 생성이 가능합니다.
static T* GetSingleton()
{
// 아직 생성이 되어 있지 않으면 생성한다.
if (NULL == _Singleton) {
_Singleton = new T;
}
return (_Singleton);
}
static void Release()
{
delete _Singleton;
_Singleton = NULL;
}
private:
static T* _Singleton;
};
template <typename T> T* MySingleton<T>::_Singleton = NULL;
class MyObject : public MySingleton<MyObject>
{
public:
MyObject() : _nValue(10) {}
void SetValue(int Value) { _nValue = Value; }
int GetValue() { return _nValue; }
private:
int _nValue;
};
void test2()
{
MyObject* MyObj1 = MyObject::GetSingleton();
std::cout << MyObj1->GetValue() << std::endl;
MyObject* MyObj2 = MyObject::GetSingleton();
MyObj2->SetValue(20);
std::cout << MyObj1->GetValue() << std::endl;
std::cout << MyObj2->GetValue() << std::endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
return test2();
}
댓글
댓글 쓰기