Agrega miembros dinámicamente a una clase usando Lua + SWIG
Este código Lua, crea una tabla y agrega dinámicamente un nuevo miembro. Ejecutando esto puedo conseguir"hello"
en la pantalla como se esperaba:
foo = {}
foo.x = "hello"
print(foo.x)
Pero ahora estoy usando SWIG para enlazar algunas clases de C ++ a Lua. Para ello, en untest.i
(Archivo de módulo SWIG) Creé una clase simple como esta:
%module test
%inline
%{
class Foo
{
public:
Foo() { X = 0; }
void SetX(int x) { X = x; }
int GetX() { return X; }
private:
int X;
};
%}
Luego escribí un código de prueba de Lua así:
obj = test.Foo()
obj:SetX(5)
print("Number: " .. obj:GetX())
Corriendo y consiguiendo"Number 5"
como se esperaba. El problema es que cuando agrego dinámicamente un nuevo miembro a mi objeto con enlace SWIG, y trato de acceder a él, así:
obj.Y = 7
print("Number: " .. obj.Y)
Me sale este mensaje de error:
"attempt to concatenate field 'Y' (a nil value)"
¿Es posible agregar dinámicamente nuevos miembros en objetos enlazados usando SWIG? ¿Hay alguna opción sin tener que pasar a otra biblioteca de enlace de Lua?