我正在尝试使用boost :: python(boost 1.58)包装c ++枚举。枚举的类型为uint32_t,除了大数字之外,所有值都包装没有问题,从0x4000 0000开始。
尝试将枚举值(uint32)包装为0x4000 0000会导致enum.hpp崩溃,第95行(增强1.58)。我用VS2012(win7)观察到这种行为。
有什么想法吗?
示例:
enum EnumName: uint32_t
{
valueOK = 0x20000000,
valueCrash = 0x40000000
};
boost::python::enum_<EnumName>("EnumName")
.value("valueOK", valueOK)
.value("valueCrash", valueCrash)
;
答案 0 :(得分:0)
我无法重现这个问题。使用
<强> Live On Coliru 强>
#include <boost/python.hpp>
enum EnumName: uint32_t
{
valueOK = 0x20000000,
valueCrash = 0x40000000
};
EnumName identity_(EnumName x) { return x; }
BOOST_PYTHON_MODULE(test)
{
boost::python::enum_<EnumName>("EnumName")
.value("valueOK", valueOK)
.value("valueCrash", valueCrash)
;
//boost::python::def("identity", identity_);
}
大厦:
g++-5 -std=c++11 -Wall -pedantic -fPIC -fsanitize=undefined -g -O0 -isystem /home/sehe/custom/nonius/include -isystem /usr/include/python2.7 -pthread test.cpp -c -o test.o
g++-5 -std=c++11 -Wall -pedantic -fPIC -fsanitize=undefined -g -O0 -isystem /home/sehe/custom/nonius/include -isystem /usr/include/python2.7 -pthread test.o -shared -o test.so -lpython2.7 -lboost_python
使用
$ python2.7 <<< 'from test import *; print (EnumName.valueCrash+0);'
1073741824