boost::python::enum large uint32崩溃

2024-04-24 23:09:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用boost::python(boost 1.58)包装一个c++枚举。枚举的类型为uint32\t,除了从0x4000 0000开始的大数字外,所有值都被包装,没有问题。你知道吗

尝试将枚举值(uint32)包装为0x4000 0000会导致崩溃枚举.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)
        ;

Tags: 示例类型value数字enumhppboostuint32
1条回答
网友
1楼 · 发布于 2024-04-24 23:09:29

我无法再现这个问题。使用

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

相关问题 更多 >