Lua Utils
Biblioteca utilitária para facilitar a integração de Lua com C++
Loading...
Searching...
No Matches
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.
 

Static Private Member Functions

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

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);
}
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 upva...
Definition luaMethod.h:97
Definition luaProxy.h:41
virtual void populateMetatable(lua_State *L, int index)=0
Classe auxiliar para registro dos nomes e métodos a serem chamados.
Definition luaMethod.h:77

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: