프로그래밍 언어 입문서가 아닌 프로그래밍 기초 개념 입문서
문과생, 비전공자를 위한 프로그래밍 입문책입니다.
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

댓글을 달아 주세요