프로그래밍

C++에서 ID Type이 필요할때 어떻게 쓰시나요??

알 수 없는 사용자 2013. 4. 5. 17:50

게임에서 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. 글을 너무 오랜만에 쓴 관계로.. (실제로 글쓰기 버튼 찾는데 한참 걸림...) 글쓰는 법을 까먹어서..
     코드도 전부 직접 타이핑하고 색도 전부 하나하나 직접 바꿔준거라.. 어색하거나 틀린 부분이 있을 수 있습니다.

반응형