论c++怎么和自己的小弟lua双剑合璧,发挥实力的?
博客专区 > 阳666 的博客 > 博客详情
论c++怎么和自己的小弟lua双剑合璧,发挥实力的?
阳666 发表于6个月前
论c++怎么和自己的小弟lua双剑合璧,发挥实力的?
  • 发表于 6个月前
  • 阅读 34
  • 收藏 1
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: c++和小弟的双剑合璧

    假设读者已经有了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的成员变量。

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

 

共有 人打赏支持
粉丝 4
博文 70
码字总数 60703
×
阳666
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: