꽃미남 프로그래머 김포프가 창립한 탑 프로그래머 양성 교육 기관 POCU 아카데미 오픈!
절찬리에 수강생 모집 중!
프로그래밍 언어 입문서가 아닌 프로그래밍 기초 개념 입문서
문과생, 비전공자를 위한 프로그래밍 입문책입니다.
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() 라고 적으시면 됩니다. 뭐 취향차이겠지만요