- Código: Seleccionar todo
#include <luabind/luabind.hpp>
#include <luabind/adopt_policy.hpp>
#include<iostream>
using namespace std;
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
void pt(int *p)
{
cout<<*p<<endl;
}
class nume
{
public:
int *n;
nume(){};
void set(int i){n=new int; *n=i;}
int *get(){return n;}
};
int main(int argc,char* argv[]) {
// Create a new lua state
lua_State *L = lua_open();
// Connect LuaBind to this lua state
luabind::open(L);
luaL_openlibs(L);//load basic libs
using namespace luabind;
module(L)
[
def("pt", &pt)
];
module(L)
[
class_<nume>("nume")
.def(constructor<>())
.property("n",&nume::set, &nume::get,luabind::detail::null_type(), adopt(result))
];
luaL_dostring(
L,
"a=nume()\n"
"a:set(2)\n"
"print(2)\n"
);
lua_close(L);
}
Comando para compilar: g++ -I ./ -I/usr/local/include -I/usr/include/lua5.1 -lluabind -llua5.1 -ldl -o test test.cpp
OK, bueno pues se supone que lo que debe hacer es devolverme un apuntador a un entero de c++, y que dentro le lua lo pueda volver a enviar a una funcion de c++, pero no funciona, Cuando llamo a a:set(2) no se ejecuta el script por que tiene un error, Si lo quito ya se ejecuta.
Hay poca documentacion de esto en la web y por eso me ha costado trabajo, ya logre exportar funciones y clases, y lo pude ejecutar bien, pero nececito los apuntadores, espero que alguien sepa del tema.