Lua Utils
Biblioteca utilitária para facilitar a integração de Lua com C++
Classes | Public Types | Static Public Member Functions | Static Private Member Functions | List of all members
LuaMethod< T > Class Template Reference

Classe auxiliar para facilitar o cadastro de métodos a serem chamados por Lua. More...

#include <luaMethod.h>

Classes

struct  MethodRegistry
 Classe auxiliar para registro dos nomes e métodos a serem chamados. More...
 

Public Types

typedef int(T::* MethodType) (lua_State *)
 Typedef para método de T com assinatura de uma função chamada por Lua.
 

Static Public Member Functions

static void registerMethods (lua_State *L, struct MethodRegistry *methods, int upvalues=0)
 Registra na tabela contida na pilha as funções contidas em methods. Permite que sejam associados upvalues com as funções. More...
 

Static Private Member Functions

static int methodRedirector (lua_State *L)
 Stub utilizado para chamada dos métodos da classe T. More...
 

Detailed Description

template<typename T>
class LuaMethod< T >

Classe auxiliar para facilitar o cadastro de métodos a serem chamados por Lua.

Tradicionalmente, para cadastrar um método de um objeto C++ que deve ser chamado pelo ambiente Lua, é necessário o uso de uma função estática auxiliar que obtém como primeiro parâmetro na pilha o objeto C++ do qual o método está sendo chamado e chama o método.

Esta classe elimina esta necessidade através do uso de uma função de redirecionamento genérica, que automaticamente obtém o objeto da pilha e chama o método equivalente.

Uso:

class MyClass : public LuaProxy::Base
{
public:
void populateMetatable(lua_State * L, int index);
private:
int metodo1(lua_State* L);
int metodo2(lua_State* L);
int metodo3(lua_State* L);
};
void MyClass::populateMetatable(lua_State * L, int index);
{
{"metodo1", &MyClass::metodo1},
{"metodo2", &MyClass::metodo2},
{"metodo3", &MyClass::metodo3},
{NULL, NULL}
};
lua_pushstring(L, "__index");
lua_gettable(L, index);
lua_pop(L, 1);
}

Member Function Documentation

◆ methodRedirector()

template<typename T >
static int LuaMethod< T >::methodRedirector ( lua_State *  L)
inlinestaticprivate

Stub utilizado para chamada dos métodos da classe T.

Recebe como upvalue o método a ser chamado através de um lightuserdata apontando para um resgistro do tipo MethodRegistry.

Espera como primeiro parâmetro na pilha o objeto do qual os métodos devems ser chamados (chamada em Lua do tipo obj:metodo())

◆ registerMethods()

template<typename T >
static void LuaMethod< T >::registerMethods ( lua_State *  L,
struct MethodRegistry methods,
int  upvalues = 0 
)
inlinestatic

Registra na tabela contida na pilha as funções contidas em methods. Permite que sejam associados upvalues com as funções.

Tabela deve ser terminada com uma entrada NULL. Além disso, a tabela deve ser estática ou global, uma vez que ponteiros para as entradas da tabela serão armazenados em Lua.

Se upvalues == 0, a tabela onde os métodos serão registrados deverá estar no topo da pilha. Caso contrário, a tabela deve ser seguida dos upvalues desejados. Quando o método for chamado de Lua, o primeiro upvalue se encontrará na posiçao lua_upvalueindex(2), já que o primeiro upvalue é usado internamente pela classe.


The documentation for this class was generated from the following file: