게임에서 ID 참 많이 쓰입니다. 중요한 ID도 있고 그렇지 않은 ID도 있죠..
다른 분들은 ID Type이 필요할 때 어떤식으로 쓰시나요??
저는 한때 이렇게 썼었습니다.
typedef unsigned long MyIDType;
MyIDType xxxID;
그런데 이렇게 쓰다보면 항상 필요하게 되는 것이 있습니다.
바로 할당되지 않은 ID죠
static const MyIDType MyIDType_InvalidID = type_traits::number_limits<MyIDType>::max;
이런식으로 만들어서 쓰다보니 불편함을 많이 느꼈습니다.
그래서 이런걸 생각해봤습니다.
namespace MyID
{
typedef unsigned long Type;
static const Type InvalidID = type_traits::number_limits<Type>::max;
}
그런데 또 생각해보니 변수를 생성하면 자동으로 InvalidID가 할당되면 좋겠다 싶더군요..
그래서 이런걸 만들어봤습니다.
template<typename T>
class TypeIDT
{
public:
static const T InvalidID = type_traits::number_limits<T>::max;
public:
TypeIDT()
: m_value( InvalidID )
{
}
TypeIDT( T value )
: m_value( value )
{
}
TypeIDT& operator = ( T value )
{
m_value = value;
return *this;
}
operator T () const
{
return m_value;
}
bool operator < ( const TypeIDT<T>& other ) const
{
return m_value < other.m_value;
}
bool operator != ( const TypeIDT<T>& other ) const
{
return m_value != other.m_value;
}
bool operator == ( const TypeIDT<T>& other ) const
{
return m_value == other.m_value;
}
private:
T m_value;
};
namespace boost
{
template<typename T>
size_t hash_value( const TypeIDT<T>& value )
{
return static_cast<size_t>( value );
}
}
ps. 글을 너무 오랜만에 쓴 관계로.. (실제로 글쓰기 버튼 찾는데 한참 걸림...) 글쓰는 법을 까먹어서..
코드도 전부 직접 타이핑하고 색도 전부 하나하나 직접 바꿔준거라.. 어색하거나 틀린 부분이 있을 수 있습니다.
'프로그래밍' 카테고리의 다른 글
미니덤프 파일이 안남는다고 디버깅을 포기할텐가?!?!!?!! (0) | 2013.04.06 |
---|---|
std::numeric_limits 의 min, max는 왜 클래스 내부 초기화를 할 수 없는가?! (4) | 2013.04.06 |
cocos2d-x 프로파일링 기능에 관한 짧은 팁 (0) | 2013.04.05 |
모바일 게임 만들기 체험을 해봐요. 프로그래밍을 몰라도 좋아요. (17) | 2013.01.18 |
C# Singleton class (10) | 2013.01.03 |