2015-07-08 4 views
0

У меня возникли проблемы с назначением элемента в enum максимальным значением. Первый:Назначение перечисления максимального значения через numeric_limits?

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 дать мне значение что я могу использовать при компиляции t ime для enum?


Библиотека старше, поэтому она поддерживает множество старых компиляторов и IDE. Мне нужно что-то, что по крайней мере C++ 03 и желательно C++ 98.

И стандартные оговорки применяются: это простой проект на основе макета. Он не использует Autotools, он не использует Cmake, он не использует Boost и т. Д.

+0

Вы компилируете с помощью '-std = C++ 11'? – Barry

+0

'numeric_limits :: max' объявляется как' static', тогда как перечисления требуют констант. –

+0

@ Джонатан - Я был бы удивлен, если бы он не был постоянным. Вы говорите, что это может как-то измениться во время выполнения? – jww

ответ

3

В C++ 03, std::numeric_limits<T>::max() было просто static. В C++ 11 это стало static constexpr. Вам понадобится последнее, чтобы использовать его в интегральном постоянном выражении, поэтому сделайте просто компиляцию с помощью -std=c++11.

Если вы не можете использовать C++ 11, вы можете просто использовать UINT_MAX.

+0

Обратите внимание, что в VC++ 2013 он по-прежнему остается «статическим», поэтому зависит от компилятора. –

+0

Эта библиотека устарела и поддерживает множество старых компиляторов и IDE. Мне нужны C++ 98, C++ 03 и C++ 11. Является ли 'numeric_limits' неправильным инструментом для работы? (Я думал, что предполагается использовать на C++). – jww

+0

'enum' в порядке. Как и 'numeric_limits'. Вы просто не можете комбинировать эти два перед C++ 11. – Barry