通过numeric_limits为枚举最大值分配?

时间:2015-07-08 01:59:48

标签: c++ enums limits

我在enum最大值中分配元素时遇到问题。第一:

protected:
    enum {DEFAULT_PADDING=std::numeric_limits<enum>::max()};

结果:

./basecode.h:30:51: error: expected identifier or '{'
    enum {DEFAULT_PADDING=std::numeric_limits<enum>::max()};
                                                  ^
./basecode.h:30:59: error: expected a type
    enum {DEFAULT_PADDING=std::numeric_limits<enum>::max()};

(and a couple of others)

其次,切换到:

protected:
    enum {DEFAULT_PADDING=std::numeric_limits<unsigned int>::max()};

结果:

./basecode.h:30:27: error: expression is not an integral constant expression
    enum {DEFAULT_PADDING=std::numeric_limits<unsigned int>::max()};

我如何numeric_limits给我一个值,我可以在编译时使用enum

库较旧,因此它支持许多较旧的编译器和IDE。我需要的东西至少是C ++ 03,最好是C ++ 98。

标准警告适用:这是一个简单的基于制作的项目。它不使用Autotools,它不使用Cmake,它不使用Boost等。

1 个答案:

答案 0 :(得分:3)

在C ++ 03中,std::numeric_limits<T>::max()只是static。在C ++ 11中,它变为static constexpr。您需要后者才能在整数常量表达式中使用,因此只需使用-std=c++11进行编译即可。

如果您不能使用C ++ 11,则可以使用UINT_MAX