Я пытаюсь реализовать базовые манипуляции с векторным классом, используя инструкции, представленные по адресу:
http://swig.org/Doc1.3/SWIG.html#SWIG_adding_member_functions
И у меня есть следующее .i:
%module mymodule
%{
typedef struct
{
float x,y,z;
} Vector3f;
%}
typedef struct
{
float x,y,z;
} Vector3f;
%extend Vector3f {
Vector3f(float x, float y, float z) {
Vector3f *v;
v = (Vector3f *) malloc(sizeof(Vector3f));
v->x = x;
v->y = y;
v->z = z;
return v;
}
~Vector3f() {
free($self);
}
void print() {
printf("Vector [%f, %f, %f]\n", $self->x,$self->y,$self->z);
}
};
Теперь моя проблема в том, что я вызываю следующий код на Lua:
print(mymodule)
local v = Vector(3,4,0)
v.print()
--By the way is there an equivalent in Lua?
--del v
Я получил следующий вывод:
table: 0x000001F9356B1920
attempt to call global 'Vector' (a nil value)
Очевидно, что модуль загружен правильно, когда я сначала печатаю адрес таблицы
но я не могу создать вектор ... Я также пытался вызвать метод модуля, такой как mymodule:Vector(1,2,3)
, по-прежнему выдает ошибку. Что мне здесь не хватает?
Все, что я хочу, - это создать новый Vector
и уничтожить его.
используя метод ~ Vector3f (). Что я должен изменить, чтобы сделать этот механизм
рабочий?