std::numeric_limits 의 min, max는 왜 클래스 내부 초기화를 할 수 없는가?!
std::numeric_limits의 min(), 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;
};
... 생략
}