構造体で関数ポインターを使用してメンバー関数を実装し、構造体へのポインターを各関数の最初の引数として渡します。 C++.
%module mytest
%{
typedef struct mytest mytest;
struct mytest {
int data;
int (*func1)(mytest *,int);
void (*func2)(mytest *,int);
};
int f1(mytest *me,int n) { return me->data + n; }
void f2(mytest *me,int n) { me->data += n; }
mytest *mytestNew(int n) {
mytest *me = (mytest*) malloc(sizeof(mytest));
me->data = n;
me->func1 = f1;
me->func2 = f2;
return me;
}
%}
typedef struct mytest mytest;
struct mytest {
int data;
int func1(mytest *,int);
void func2(mytest *,int);
};
extern mytest *mytestNew(int n);
今私の問題は、インターフェイスがフロントエンドで選択した言語に作成されると、言語自体が this の非表示をサポートしているにもかかわらず、明示的に「this」ポインターをオブジェクトに渡さなければならなくなることです。
たとえば、Python を選択したとします。私はこのようなことをしなければなりません:
from mytest import *
m = mytestNew(1)
m.func1(m,0)
私が本当に欲しいのは、次のようにすることです:
from mytest import *
m = mytestNew(1)
m.func1(0)
ラッピング コードを書くことができることはわかっていますが、実際のプロジェクトでは、既存の C コードの多くのオブジェクトに多くの関数があり、これをサポートしたいすべての言語で掛け合わせると、あまりにも多くの作業になります! SWIGにこれを自動的に行わせる方法はありますか?