2014-04-11 12 views
5
enum MyEnum 
{ 
    SOME_NAME = 2147483648; 
}; 

... 

enum_<MyEnum>("MyEnum") 
    .value("SOME_NAME", SOME_NAME) 
; 

Podczas tej kompilacji w porządku, to wywala na inicjalizacji przyczyna enum_ rzuca wartości jako „długi”, który jest ograniczony do 2147483647. Będę potrzebował ich bez długiego podpisu. Czy jest jakiś sposób, aby to zrobić bez konieczności tworzenia całego opakowania enum?Zwiększ Python enum_ wartość max wystawia

Dzięki!

+0

Widziałem wyjaśnienia tego problemu na SO wcześniej. Czy szukasz? – sehe

+0

http://stackoverflow.com/a/31618198/85371 – sehe

+0

http://stackoverflow.com/questions/34332372/boostpythonenum-large-uint32-crash – sehe

Odpowiedz

1

C++ pozwala niejawnie rzutować enum do int, a nie unsigned int. Ograniczasz się do INT_MAX jako maksymalnej wartości. Ponadto musisz odrzucić int (lub unsigned int, który przekształca się w znak), aby przekonwertować go z powrotem na enum.