gpt4 book ai didi

c++ - 如何使用 SWIG 将 std::vector 公开为 Python 列表?

转载 作者:IT老高 更新时间:2023-10-28 22:21:20 26 4
gpt4 key购买 nike

我正在尝试使用 SWIG 将此函数公开给 Python:

std::vector<int> get_match_stats();

我希望 SWIG 为 Python 生成包装代码,以便我可以将其视为整数列表。

将此添加到 .i 文件中:

%include "typemaps.i"%include "std_vector.i"namespace std{  %template(IntVector) vector<int>;}

我正在运行 SWIG 版本 1.3.36 并使用 -Wall 调用 swig,但没有收到任何警告。

我可以访问一个列表,但是在使用 -Wall (使用 g++ (GCC) 4.2.4 )编译时会收到一堆警告生成的 C++ 代码如下:

  warning: dereferencing type-punned pointer will break strict-aliasing rules

我是否正确地公开了函数?如果是这样,警告是什么意思?


这些是同一函数中违规行之前的行:

SWIGINTERN PyObject *_wrap_IntVector_erase__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {  PyObject *resultobj = 0;  std::vector *arg1 = (std::vector *) 0 ;  std::vector::iterator arg2 ;  std::vector::iterator result;  void *argp1 = 0 ;  int res1 = 0 ;  swig::PySwigIterator *iter2 = 0 ;  int res2 ;  PyObject * obj0 = 0 ;  PyObject * obj1 = 0 ;  if (!PyArg_ParseTuple(args,(char *)"OO:IntVector_erase",&obj0,&obj1)) SWIG_fail;  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 |  0 );  if (!SWIG_IsOK(res1)) {    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IntVector_erase" "', argument " "1"" of type '" "std::vector *""'");   }  arg1 = reinterpret_cast * >(argp1);

这是有问题的行:

  res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::PySwigIterator::descriptor(), 0);

更多代码如下。

用g++ 4.2.4编译时产生的警告是:

swig_iss_wrap.cxx: In function ‘PyObject* _wrap_IntVector_erase__SWIG_0(PyObject*, PyObject*)’:swig_iss_wrap.cxx:5885: warning: dereferencing type-punned pointer will break strict-aliasing rules

最佳答案

%template(IntVector) vector<int>;

关于c++ - 如何使用 SWIG 将 std::vector<int> 公开为 Python 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/276769/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com