저는 C++ API가 있습니다. 파이썬으로 포장하려고합니다. 나는 푸는 C++ 클래스입니다SWIG를 사용하여 Python에서 C++ typedef에 액세스
/* my_header.h */
namespace my_namespace {
typedef std::vector<Foo> Bar
}
의 typedef 인수로 다음과 같은 C++를 복용 감싸 C++ 기능이 myfunc를 호출합니다. 나는 함수와 기본 클래스 Foo를 래핑 할 수 있었지만 Foo의 벡터를 만드는 방법을 모른다. 이 작품
%include std_vector.i
namespace std {
%template(vector_foo) vector<Foo>;
}
다음과 같이 나 또한 표준 : 꿀꺽 꿀꺽 벡터 템플릿을 포장하려
/* my_interface.i */
%{
#include "my_header.h"
typedef my_namespace::Bar Bar;
%}
%include "my_header.h"
를 다음과 같이 내 꿀꺽 꿀꺽 .I 파일의 .H 파일을 포함, 나는 가져올 수 있습니다 파이썬에서 vector_foo. 그러나, 위에서 언급 한 함수에 vector_foo를 인수로 보내면 TypeError가 발생합니다. Foo로 vector_foo를 채울 수도 없습니다. 나는
>>> a = mymodule.vector_foo()
>>> a
<Swig Object of type 'std::vector <Foo, std::allocator<Foo> > *'
>>> mymodule.myfunc(a, 'string')
TypeError: in method 'myfunc', argument 1 of type 'my_namespace::Bar &'
다음을 수행 파이썬에서
어느 나는 형식 정의 직접 C++를 액세스 어떻게 든 푸 작업 벡터 내 자신의 구현을 만들거나 할 수 있습니다. 나는 SWIG를 호출하고 Python Distutils를 사용하여 컴파일합니다.
도움 주셔서 감사합니다.
''% include'' 전에 typdef를 정의 했는가? 나는 당신이''% {... %}''에서와 같이 정의 할 필요가 있다고 가정했을 것입니다,''#include'' 다음에옵니다. – spencerlyon2