私はPythonでラップしようとしているC++ APIを持っています。私は、引数としてfooが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>;
}
次のように、私ものstd :: SWIGのベクトルテンプレートをラップしようとした
/* my_interface.i */
%{
#include "my_header.h"
typedef my_namespace::Bar Bar;
%}
%include "my_header.h"
を次のように私は私のSWIG .iファイルで.hファイルを含めて、私はインポートすることができますPythonのvector_fooしかし、上記の関数にvector_fooを引数として渡すと、TypeErrorが返されます。 vector_fooにFooを設定することもできません。
私はFooの作業のベクトルの私の独自の実装を行い、または何らかの形で直接C++のtypedefにアクセスできる場合、私はどちらか>>> 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 &'
を次の操作を行いPythonで
。私はSWIGを呼び出し、Python Distutilsを使ってコンパイルしています。
ありがとうございました!
''%include''の前にtypdefを定義するという事実は重要ですか? ''%{...%} ''のように、 '' #include''の後に来るように定義する必要があると思います – spencerlyon2