文档章节

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

阳666
 阳666
发布于 2017/06/25 00:45
字数 851
阅读 54
收藏 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
粉丝 6
博文 76
码字总数 62870
作品 0
长宁
程序员
私信 提问
lua与C++在游戏开发中各自所占比重

在游戏服务器端开发时发现,公司的服务器逻辑(特定游戏服务器)有的部分用C++有的用lua,感觉很乱;怎么分会好处理,能发挥lua和c++各自的特点呢?求指导??

zxcestar
2014/07/14
3.9K
3
FFLIB之FFLUA——C++嵌入Lua&扩展Lua利器

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

知然
2013/01/27
0
0
Lua脚本在C++下的舞步(三)

前两天一直忙于工作,没有时间来更新,呵呵,今天赶紧补上吧。 上一讲我把Lua基本的栈规则讲了一下,然后完善了一下我的CLuaFn类。让它可以支持任意参数数量和函数名称的传值。当然,这些功能...

长平狐
2012/08/13
1K
0
支持纯lua脚本开发的朋友C++水平如何?进来讨论一下或者分享一下目前自己的C++水平

支持纯lua脚本开发的朋友C++水平如何?只要有几个评定标准:1:内存管理熟不熟?2:C11的熟悉程度 3:C++多继承以及设计模式的使用熟悉程度 4:DEBUG项目或者帮助同事做代码review。请问对这...

王敬哲
2014/06/22
465
0
(转)LUA与python根本就不具有可比性

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

Yisen
2011/06/27
0
3

没有更多内容

加载失败,请刷新页面

加载更多

Spring源码学习笔记-1-Resource

打算补下基础,学习下Spring源码,参考书籍是《Spring源码深度解析》,使用版本是Spring 3.2.x,本来想试图用脑图记录的,发现代码部分不好贴,还是作罢,这里只大略记录下想法,不写太细了 ...

zypy333
今天
10
0
RestClientUtil和ConfigRestClientUtil区别说明

RestClientUtil directly executes the DSL defined in the code. ConfigRestClientUtil gets the DSL defined in the configuration file by the DSL name and executes it. RestClientUtil......

bboss
今天
17
0

中国龙-扬科
昨天
2
0
Linux系统设置全局的默认网络代理

更改全局配置文件/etc/profile all_proxy="all_proxy=socks://rahowviahva.ml:80/"ftp_proxy="ftp_proxy=http://rahowviahva.ml:80/"http_proxy="http_proxy=http://rahowviahva.ml:80/"......

临江仙卜算子
昨天
11
0
java框架学习日志-6(bean作用域和自动装配)

本章补充bean的作用域和自动装配 bean作用域 之前提到可以用scope来设置单例模式 <bean id="type" class="cn.dota2.tpye.Type" scope="singleton"></bean> 除此之外还有几种用法 singleton:......

白话
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部