lua绑定cpp对象(闭包与非闭包) 实现

本文介绍了如何使用Lua绑定C++对象,包括非闭包和闭包的实现方式。通过创建C++类并定义相关方法,然后使用userdata和元表在Lua中调用这些方法。非闭包实现中,通过Lua传递userdata到C++,再由C++调用相应对象的方法。闭包实现则允许直接通过对象和函数调用来简化静态函数的使用。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值