LuaIntf-第一步「建议收藏」

LuaIntf-第一步

大家好,又见面了,我是全栈君。

LuaInft   https://github.com/SteveKChiu/lua-intf

ReadME .MD https://github.com/SteveKChiu/lua-intf/blob/master/README.md

一些基础信息,作者在github上面描述很清楚

这个lib 提供了cpp和lua交互 解决方案

1.运行执行lua文件 函数

	lua_State *l = luaL_newstate();
	luaL_openlibs(l);

	LuaIntf:: LuaContext ctx(l);
	ctx.doFile("1.lua");

	LuaIntf::LuaRef func(l, "func");
	func(1000);

2.导出class 


#include "LuaIntf/LuaIntf.h"

using namespace LuaIntf;

class Test
{
public:
	void Print()
	{
		cout << __FUNCTION__ << this->GetValue() << endl;
	}

	void SetValue(int v) { this->_value = v; }//setter

	int GetValue() { return this->_value; };//getter

	Test(string s) {}
	Test(void) {}
private:
	int _value = 0; // inner value
};

int main(int argc, char *argv[])
{
	lua_State *l = luaL_newstate();
	luaL_openlibs(l);

	LuaIntf::LuaBinding(l).beginClass<Test>("Test")
		.addConstructor(LUA_ARGS(_opt<std::string>))
		.addConstructor(LUA_ARGS())
		.addFunction("Print", &Test::Print)
		.addProperty("v", &Test::GetValue, &Test::SetValue) // 绑定getter 和setter,lua变量名为v
		.endClass();

	try
	{
		LuaIntf::LuaContext ctx(l);
		ctx.doFile("1.lua");

		LuaIntf::LuaRef func(l, "func");
		func(1000);
	}

	catch (LuaException  e)
	{
		cout << e.what();
	}
	_CrtDumpMemoryLeaks();
	system("pause");
	return 0;
}


lua代码

print("567856");


  function func(x)
    print(x);
end




local xxx= Test();
 xxx:Print();
 xxx.v=3;
 xxx:Print();



 

3.注册模块

比上面的代码多了:


	LuaIntf::LuaBinding(l).beginModule("cpp") /// cpp 模块名字
		.addFunction("log", &log1)
		.addFunction("FUNCNAME", [=] 
	{
		log1(__FUNCTION__);
	})
		.endModule();


lua代码


cpp.log("haha");
cpp.FUNCNAME();

 

 

 

 

 

 

转载于:https://my.oschina.net/kkkkkkkkkkkkk/blog/825686

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108693.html原文链接:https://javaforall.net

(0)
上一篇 2022年2月23日 下午8:00
下一篇 2022年2月23日 下午9:00


相关推荐

  • M3U8在线播放

    M3U8在线播放M3U8在线播放前言一、思路二、代码框架1.移动端适配2.改变M3U8地址3.设置videojs参数4.增加快进等功能写在最后前言当我们在网上愉快观影的时候,难免会遇到“M3U8格式”的视频。聪明的你应该也发现了,它是没办法直接播放的。它其实只是一个索引文件,根据它找到相应的.ts文件再进行播放。而这样做的好处,大概就是做多码率适配,保证视频播放的流畅性。有感兴趣的小伙伴可以参看这里—>M3U8文件格式。我今天要干的事情呢,就是解决当我们找到一个M3U8地址之后如何方便的播放它~一

    2022年6月15日
    139
  • Mac激活idea【2021免费激活】

    (Mac激活idea)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月29日
    316
  • 在 pycharm中安装pytorch

    在 pycharm中安装pytorch参考文章:在pycharm中安装pytorch:https://blog.csdn.net/weixin_43183872/article/details/83473009torch包在pycharm里面的导入问题:https://blog.csdn.net/qq_31187803/article/details/79601643…

    2022年8月25日
    9
  • goland激活(在线激活)「建议收藏」

    goland激活(在线激活),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    431
  • 汇编基础 – 寄存器英文全称

    汇编基础 – 寄存器英文全称AH amp AL AX accumulator 累加寄存器 BH amp BL BX base 基址寄存器 CH amp CL CX count 计数寄存器 DH amp DL DX data 数据寄存器 SP StackPointer 堆栈指针寄存器 BP BasePointer 基址指针寄存器 SI SourceIndex 源变址寄存器 DI DestinationI 目的变址寄存器 IP InstructionP 指令指针寄存器

    2026年3月17日
    1
  • docker restart=always_MySQL having

    docker restart=always_MySQL having在面试中关于多线程同步,你必须要思考的问题一文中,我们知道glibc的pthread_cond_timedwait底层是用linuxfutex机制实现的。理想的同步机制应该是没有锁冲突时在用户态利用原子指令就解决问题,而需要挂起等待时再使用内核提供的系统调用进行睡眠与唤醒。换句话说,在用户态的自旋失败时,能不能让进程挂起,由持有锁的线程释放锁时将其唤醒?如果你没有较深入地考虑过这个问题,很可能…

    2026年2月9日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号