lua绑定cpp对象(闭包与非闭包) 实现
csdn的账号找不回来了 所以就复制过来
最近在研究lua,自己写了一下lua调用c++对象,思路大概就是用userdata与对象绑定 然后通过元表来实现函数的调用
先随便写个类
头文件:
#pragma once
#include<iostream>
class LuaTestObj
{
private:
int i;
public:
LuaTestObj(int i);
~LuaTestObj();
void sayHello();
int add(int a, int b);
int getI();
void setI(int i);
};
cpp:
#include "stdafx.h"
#include "LuaTestObj.h"
LuaTestObj::LuaTestObj(int i)
{
LuaTestObj::i = i;
}
LuaTestObj::~LuaTestObj()
{
}
void LuaTestObj::sayHello()
{
std::cout << "hello" <<std::endl;
}
int LuaTestObj::add(int a, int b)
{
return a+b;
}
int LuaTestObj::getI()
{
return LuaTestObj::i;
}
void LuaTestObj::setI(int i)
{
LuaTestObj::i = i;
}
很简单,就是一个构造函数 一个set一个get 还有个两数相加的add
然后开始实现c++对象与lua的绑定
先写非闭包的实现,大概思路就是lua向cpp传入userdata cpp得到userdata后再来调用指定方法
h:
#pragma once
#include "LuaTestObj.h"
extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
#define CLASS_NAME "LuaTestObj"
class LuaTestObjWrapper:LuaTestObj
{
public:
LuaTestObjWrapper(lua_State * L) :LuaTestObj(luaL_checkint(L, 1)) {}
~LuaTestObjWrapper();
static void Register(lua_State * L);//注册函数
static int Constructor(lua_State * L);//构造器
//下面是要被注册的函数
static int _sayHello(lua_State * L);
static int _add(lua_State * L);
static int _getI(lua_State * L);
static int _setI(lua_State * L);
};
cpp:
#include "stdafx.h"
#include "LuaTestObjWrapper.h"
LuaTestObjWrapper::~LuaTestObjWrapper()
{
}
void LuaTestObjWrapper::Register(lua_State * L)
{
lua_pushcfunction(L, &LuaTestObjWrapper::Constructor);
lu