프로그래밍

std::numeric_limits 의 min, max는 왜 클래스 내부 초기화를 할 수 없는가?!

알 수 없는 사용자 2013. 4. 6. 16:57

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;
    };

    ... 생략

}


반응형