SWIG를 사용하여 std::Vector<int>를 Python 목록으로 노출하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/276769

  •  07-07-2019
  •  | 
  •  

문제

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 Version 1.3.36 그리고 swig를 부르면서 -Wall 경고가 표시되지 않습니다.

목록에 액세스할 수 있지만 다음과 같이 컴파일할 때 많은 경고가 표시됩니다. -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>;

다른 팁

저는 Swig에 대한 경험이 많지 않지만 #.i 파일에 C++ 헤더 파일을 포함하고 있습니까?다음 중 하나(또는 둘 다)를 시도해 보세요.

%include "myvector.h"


%{
#   include "myvector.h"
%}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top