![]() |
Lua Utils
Biblioteca utilitária para facilitar a integração de Lua com C++
|
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... | |
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:
|
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())
|
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.