구조체에서 함수 포인터를 사용하여 멤버 함수를 구현하고 암시 적 "this"와 비슷한 각 함수의 첫 번째 인수로 구조체에 대한 포인터를 전달하는 간단한 C "클래스" C++의 포인터.SWIG를 에뮬레이트 된 "this"포인터를 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);
지금 내 문제는, 인터페이스가 나는 프런트 엔드에서 무엇을 선택 언어를 만들 때, 나는 언어 자체가 숨어 지원에도 불구하고, 명시 적으로 객체에 "이"포인터를 전달해야하는 바람입니다 이.
예를 들어 파이썬을 선택한다고 가정합니다.
from mytest import *
m = mytestNew(1)
m.func1(m,0)
내가 정말 원하는 것은 이런 식으로 작업을 수행하는 것입니다 :이 같은 것을 할 필요가
from mytest import *
m = mytestNew(1)
m.func1(0)
을 내가 그냥 포장 코드를 작성할 수 알고,하지만 내 실제 프로젝트 I에 대한 기존 C 코드의 많은 객체에서 많은 기능을 가지고 있으며 이것을 지원하고자하는 모든 언어로 곱하면됩니다. 이것은 너무 많은 작업입니다! SWIG가 자동으로이 작업을 수행 할 수있는 방법이 있습니까?
그런데 그런 식으로 누출되면 - % newobject mytestNew'를 사용하여이를 피하려고한다. 호기심 때문에 C++을 처음 사용하지 않는 이유가 무엇입니까? – Flexo