2009-12-11 21 views
9

tengo por ejemplo, un Lua tabla/objeto:las funciones de llamada en una tabla Lua de C++

bannana 

Y esta tabla Lua tiene una función dentro de él denomina chew, que toma un parámetro

bannana.chew(5) 

también he utilizado SWIG, y tienen por ejemplo una clase CPerson:

class CPerson { 
    public: 
     // .... 
     void Eat(); 
     // .... 
}; 

puedo obtener una instancia de este objeto de Lua:

person = engine:getPerson() 

Lo que necesito para ser capaz de hacer es el siguiente código Lua:

person = engine:getPerson() 
person:Eat(bannana) 

Dónde person:eat llamarían la función chew en el bannana tabla, pasando un parámetro.

Dado que CPerson se implementa en C++, ¿qué cambios se necesitan para implementar Eat() suponiendo que la clase CPerson ya tiene un puntero de estado Lua?

Edit1: no quiero saber cómo enlazar clases de C++ a Lua, ya tengo TRAGO a hacer esto por mí, quiero saber cómo llamar a funciones Lua dentro tablas Lua, de C++.

Edit2: El CPerson clase y bannana mesa, son ejemplos generales, se puede suponer que la clase CPerson ya tiene un LuaState puntero/de referencia, y que la firma de la función del método de Eat se puede cambiar por el persona respondiendo

Respuesta

10

Haciendo caso omiso de cualquier comprobación de errores ...

lua_getglobal(L, "banana"); // or get 'banana' from person:Eat() 
lua_getfield(L, -1, "chew"); 
lua_pushinteger(L, 5); 
lua_pcall(L, 1, 0, 0); 
-1

Tal vez "Simpler Cpp Binding" será útil.

+0

ésto no me ayude, todo esto me dice es cómo pasar literales, cómo enlazar C++ para LUA con luna, y cómo pasar objetos C++ alrededor con lua . –

+0

Lo que pregunté, es cómo llamar a un método en una tabla lua de C++, ya tengo SWIG para vincular C++ a lua para mí –

+0

¿cuál es la firma exacta del método Eat de CPerson (generado por SWIG, supongo?) Por lo que entiendo, lo que quieres es la clase CPerson para obtener la tabla de lua 'bannana', ¿verdad? Creo que para eso necesita obtener un controlador en el luaState correspondiente ... – phtrivier

Cuestiones relacionadas