꽃미남 프로그래머 김포프가 창립한 탑 프로그래머 양성 교육 기관 POCU 아카데미 오픈!
절찬리에 수강생 모집 중!
프로그래밍 언어 입문서가 아닌 프로그래밍 기초 개념 입문서
문과생, 비전공자를 위한 프로그래밍 입문책입니다.
jobGuid 꽃미남 프로그래머 "Pope Kim"님의 이론이나 수학에 치우치지 않고 실무에 곧바로 쓸 수 있는 실용적인 셰이더 프로그래밍 입문서 #겁나친절 jobGuid "1판의내용"에 "새로바뀐북미게임업계분위기"와 "비자관련정보", "1판을 기반으로 북미취업에 성공하신 분들의 생생한 경험담"을 담았습니다.
Posted by 끼로

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

TAG

댓글을 달아 주세요