文档章节

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

阳666
 阳666
发布于 2017/06/25 00:45
字数 851
阅读 48
收藏 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
博文 75
码字总数 62734
作品 0
长宁
程序员
(转)LUA与python根本就不具有可比性

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

Yisen
2011/06/27
0
3
用LuaBridge为Lua绑定C/C++对象

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

shezjl
2015/10/26
0
0
cocos2d-x中使用tolua++导出函数中传递字节流给lua使用的问题

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

pigsoldier
2014/05/17
0
5
Cocos2d-x中关于lua的坑

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

pigsoldier
2014/07/06
0
0
【C#每日一帖】【转】C#与C++的区别

没有什么语言能比C++更加贴近Windows本身了,这一点也是不可否认的。如果哪一天C#也能写驱动的时候,那么C++就真的会淘汰了(这天可能不会太远又或者很遥远)。 C#能做的,C++不一定都能做,C...

c_o_d_e_r
2011/07/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

php 使用redis锁限制并发访问类

1.并发访问限制问题 对于一些需要限制同一个用户并发访问的场景,如果用户并发请求多次,而服务器处理没有加锁限制,用户则可以多次请求成功。 例如换领优惠券,如果用户同一时间并发提交换领...

豆花饭烧土豆
20分钟前
0
0
Linux环境搭建 | 手把手教你配置Linux虚拟机

在上一节 「手把你教你安装Linux虚拟机」 里,我们已经安装好了Linux虚拟机,在这一节里,我们将配置安装好的Linux虚拟机,使其达到可以开发的程度。 Ubuntu刚安装完毕之后,还无法进行开发,...

良许Linux
22分钟前
0
0
Nginix开启SSL支持HTTPS访问(自签名方法)

Nginix开启SSL支持HTTPS访问(自签名方法) 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器...

openthings
38分钟前
0
0
(三)Nginx配置·续

概述 前文写了关于Nginx环境配置,但是还没有完,接下来将会继续讲三个相关的配置 主要是以下三个 1.Nginx访问日志 2.Nginx日志切割 3.静态文件不记录日志和过期时间 Nginx访问日志 1.先看看...

杉下
今天
1
0
jquery创建类似于java的map

var map = {}; // Map map = new HashMap(); map[key] = value; // map.put(key, value); var value = map[key]; // Object value = map.get(key); var has = key in map; // boolean has = ......

SuperDabai
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部