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

std::numeric_limitsmin(), max()는 함수로 만들어져있습니다.


namespace std
{
    inline int numeric_limits<int>::min() throw()
    {
        return INT_MIN;
    }
}


그 이유는 여러가지가 있겠지만 어쨌든!! 함수로 만들어져있기에!!

클래스 내부 초기화에서 사용할 수 없습니다!!

그러니까 다시 말해서 다음과 같은 코드를 허용하지 않는다는 것입니다.


class AAA
{
    static const int xxx = std::numeric_limits<int>::max();
};


가끔 이런 코드가 필요한데 이렇게 코드를 만들고 컴파일을 해보면

error C2057: 상수 식이 필요합니다.

를 만나게 되지요..


그래서 저는 이런걸 만들어서 사용하고 있습니다.


namespace type_traits
{
    template<typename T>
    struct number_limits
    {
    };

    template<>
    struct number_limits<char>
    {
        static const char min = CHAR_MIN;
        static const char max = CHAR_MAX;
    };

    template<>
    struct number_limits<unsigned char>
    {
        static const unsigned char min = 0;
        static const unsigned char max = UCHAR_MAX;
    };

    template<>
    struct number_limits<short>
    {
        static const short min = SHRT_MIN;
        static const short max = SHRT_MAX;
    };

    ... 생략

}


TAG

댓글을 달아 주세요

  1. summerlight 2013.04.06 21:07  댓글주소  수정/삭제  댓글쓰기

    참고 : 관련 함수들은 C++11에서는 constexpr 함수로 선언되어서 상수 초기화에도 사용 가능해졌습니다. 이제 MS만 지원하면 됩니다...

    • Favicon of https://gamedevforever.com 끼로 2013.04.06 21:47 신고  댓글주소  수정/삭제

      오오!! 민철님이다!! MS는 어서 지원하라!! 그리고 템플릿 가변인자도 어서 제대로 지원하라!!! 그전에 우리팀 비줠스튜디오 2012로 업그레이드 언제해주지..

  2. Favicon of http://bluekms21.blog.me 크로스 2013.04.07 00:13  댓글주소  수정/삭제  댓글쓰기

    아아.. 이런글을 보면 C#의 편리함을 더욱 느낄 수 있네요..
    모든 타입에 .MaxValue만 치면 알아서 척척... ㅠㅠ;;

    ...이러다 영영 C++못하게되면 안되는데;

  3. 123 2014.04.23 19:47  댓글주소  수정/삭제  댓글쓰기

    굳이 클래스를 새로 만드시지 않으셔도 필요할 때마다
    std::numeric_limits<int>().max() 라고 적으시면 됩니다. 뭐 취향차이겠지만요