文档章节

论c++怎么和自己的小弟lua双剑合璧,发挥实力的?

阳666
 阳666
发布于 2017/06/25 00:45
字数 851
阅读 51
收藏 1

    假设读者已经有了c++基础,懂一点lua,用lua写过一点脚本,最好还拿他和c++做了一些简单的交互,接下来,希望读者还能了解过一些面向对象的思想。

先引出问题:

        用c++和lua完成交互,并让lua可以模块化的功能调用,  

        c++ 和lua 交互,这时lua属于脚本语言, 解释性语言。明确lua的作用,使用lua来实现模块化的功能,完成业务层的功能,而此时c++ 为底层各种功能进行封装并且开放接口

        如果只是简简单单的交互,无非是c++的函数导出,lua调用的时候把函数名注册进来的时候c++可以用根据传进来的函数名进行动态调用自己的函数,这个是初步模型。

        这里我们讨论怎么模块化的导出到lua,让lua更加简便的来做业务层的功能,

                1.首先如果我们懂mfc的话先梳理下mfc的思路,win32是一个消息循环大概是下面这个样子的: 一个window的窗口回调函数,然后根据参数 把消息ID分别进行处理,如果不懂win32编程没关系,这里有篇文章,(这个不看也没关系),http://blog.csdn.net/hyman_c/article/details/53447695,mfc的思想就是 使用map吧每一个消息id和函数对象进行关联,然后吧所有窗口的对象通过继承的时候把函数放入一个树或者列表中,然后在最后一个回调函数中分别调用,没有这个经验,不懂没关系。但是到这应该听到了一个思想,map把对应的ID和函数对象本身进行了绑定。

                2.接下来我们看一个例子, love2d中是怎么做的:

           其中box2d,sdlwindow,画图功能(opengl),以及其他功能了。 这些模块其实就是c++模块。

           然后我们以其中一个模块来举例,看下c++是怎么做的,以love.graphics模块,即opengl画图的模块:

            love.graphics这里的画画提供了lua的绘图相关接口。

            c++层分为两个:Graphics的封装(模型层),提供最基本的封装,非常接近lua要使用的接口,然后wrap_Graphics这里是lua要调用c++真正要调用到的类,这个类,是lua真正要调用的类,没错就是这里。

           这里wrap_Graphics是这样实现,分别在以前的接口中重新实现了一套函数,借着Graphics的基层,然后根据实际lua的需要,以及调用方式的改变,进行封装,之后提供了一个map,他把所有的函数名字和函数对象分别放入map中,具体注册的时候,只要提供模块名,c++遍历那个函数map,便把所有的函数注册进入lua了。  下面是这个wrap_graphics中 的函数map

        

        

             

把这个存入函数列表的map作为wrappedModule的成员变量。

                    -------------后面还要更新,前面写的啰里啰嗦,却没写多少东西哦。这是我个人看到代码后根据我说想到的,来写到这篇博客的,喜欢的支持下

 

© 著作权归作者所有

共有 人打赏支持
阳666
粉丝 4
博文 76
码字总数 62870
作品 0
长宁
程序员
FFLIB之FFLUA——C++嵌入Lua&扩展Lua利器

摘要: 在使用C++做服务器开发中,经常会使用到脚本技术,Lua是最优秀的嵌入式脚本之一。Lua的轻量、小巧、概念之简单,都使他变得越来越受欢迎。本人也使用过python做嵌入式脚本,二者各有特...

知然
2013/01/27
0
0
用LuaBridge为Lua绑定C/C++对象

最近为了总结Lua绑定C/C++对象的各种方法、第三方库和原理,学习了LuaBridge库为Lua绑定C/C++对象,下面是学习笔记,实质是对该库的Reference Manual基本上翻译了一遍,学习过程中测试代码,...

shezjl
2015/10/26
0
0
(转)LUA与python根本就不具有可比性

网上经常看到别人拿lua与python来进行对比,但是,本人认为,lua与python根本就不具有可比性.原因如下: 1、两者的定位不同。python的定位在于自身的独立开发,即是说python定位于自己能解决所有...

Yisen
2011/06/27
0
3
Cocos2d-x中关于lua的坑

上周在项目开发中遇到一个奇怪的问题,某个c++模块解压完的字节流数据传递给lua后,lua在做基于字节流的反序列化时始终出错,刚开始以为是不是c++模块读取出来的字节流有问题,但是debug发现,c+...

pigsoldier
2014/07/06
0
0
cocos2d-x中使用tolua++导出函数中传递字节流给lua使用的问题

最近一直在忙着改前端的东西,当然也遇到了一些问题,所以记录一下 cocos2d-x中使用tolua++导出函数中传递字节流给lua使用的问题 在cocos2dx 3.0 中提供了新的c/c++函数导出到lua使用的工具,...

pigsoldier
2014/05/17
0
5

没有更多内容

加载失败,请刷新页面

加载更多

Cointext在阿根廷和土耳其推出比特币现金短信钱包

Cointext于10月15日开始在土耳其和阿根廷提供新的基于SMS的比特币现金钱包服务,这两个国家的加密货币使用量急剧上升,以应对严峻的经济形势。 移动钱包 通过短信处理BCH交易 “比特币是更好...

lpy411
8分钟前
0
0
大数据早课-0918

9.18日早课 1.全局搜索含有abc的文件名称或文件夹的命令 2.当前目录一般用什么表示 3.切换到上一次和上一层命令分别是什么 4.pwd是查看当前目录的什么 5.隐藏文件或文件夹的标识是什么? 怎样...

hnairdb
9分钟前
0
0
mybatis学习笔记一

一、mybaits需要的项目依赖 <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artif......

wuyiyi
10分钟前
0
0
CentOS6 安装 GraphicsMagick

1.安装相关依赖: yum install -y gcc libpng libjpeg libpng-devel libjpeg-devel ghostscript libtiff libtiff-devel freetype freetype-devel 2.下载并解压到目录/usr/local/ wget ft......

凯文加内特
11分钟前
0
0
RabbitMq集群使用Nginx做负载均衡

1.配置rabbitmq集群(可以参考前一篇RabbitMq之部署集群) 2.Nginx做负载均衡 注意:Nginx1.90版本后 新增了stream 模块用于一般的 TCP 代理和负载均衡,之前版本不支持 修改Nginx配置文件ngi...

zhaochaochao
16分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部