2

手巻きメソッドを追加したいSWIGモジュールがあります。

%module frob

%inline %{

    int Foo(int x, int y) { return x+y; }

    PyObject* Bar(PyObject* self, PyObject* args) {
        return PyString_FromString("Hello from Bar");
    }
%}

ただし、スウィッグを実行するとswig -python frob.i、SWIGが実際にFooとBarの両方を_wrap_Foo、_wrap_Barとしてラップしていることがわかりました。

 SWIGINTERN PyObject *_wrap_Foo(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   // ...
   result = (int)Foo(arg1,arg2);
   // ...
 }    
 SWIGINTERN PyObject *_wrap_Bar(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   // ...
   result = (PyObject *)Bar(arg1,arg2);
   // ... 
}

SWIGにBarの折り返しを停止するように指示し、PyMethodDefテーブルで公開するようにするにはどうすればよいですか?

4

1 に答える 1

2

関数をラップから除外するには、%nativeディレクティブを使用します。

%module "test"

/* Prototype */    
%native(DontWrapMeBro)
PyObject* DontWrapMeBro(PyObject* self, PyObject* args);

%{
  PyObject* DontWrapMeBro(PyObject* self, PyObject* args)
  {
    return PyString_AsString("Don't wrap me");
  }
%}
于 2012-08-30T22:59:57.010 に答える