文档章节

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

阳666
 阳666
发布于 2017/06/25 00:45
字数 851
阅读 44
收藏 1
点赞 0
评论 0

    假设读者已经有了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
博文 71
码字总数 62734
作品 0
长宁
程序员
C语言编程新手入门基础知识学习:程序注释

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 05/15 ⋅ 0

当年自学c++的时候走了很多弯路,今天分享给大家学习经验

本人从事c++ 将近6年的时间,今天给大家分享下学习经验 到今年年底结束,我做c++ 开发已经6年的时间了,现在月薪可以接近三万已经算知足了,但是距离我年薪百万的目标还有很长的路要走,而以...

你的社交帐号昵 ⋅ 05/30 ⋅ 0

C语言/C++编程学习:不做C/C++工作也要学C/C++的原因!

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你学知识 ⋅ 06/13 ⋅ 0

C语言/C++编程学习:不找C/C++的工作也要学C/C++的原因!

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 06/01 ⋅ 0

跪求大佬对java web项目与桌面应用数据交互方面给予指导!

最近在做一个java web项目,其中有个模块,需要在web项目中点击某个按钮的时候向一个桌面应用程序(另一个团队使用C/C++写的程序)发送一个指令。说到底就是javaweb项目中向C/C++项目发送一个...

Daisygeo ⋅ 04/23 ⋅ 0

C语言编程入门学习:C语言实现猜数字小游戏

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 05/30 ⋅ 0

当我们聊技术实力的时候,我们到底在聊什么

技术实力的迷思 俗话说“文无第一,武无第二”,技术就是一种“文”的能力,很多时候我们很难直观看出一个技术人员的实力,但不管是公司招聘的面试,还是公司内部的晋升面评,都需要在较短时...

华仔爱技术 ⋅ 05/21 ⋅ 0

C语言/C++程序员编程学习自信心曲线图

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 05/10 ⋅ 0

VS2010/MFC编程入门教程之目录和总结(鸡啄米)

鸡啄米的这套VS2010/MFC编程入门教程到此就全部完成了,虽然有些内容还未涉及到,但帮助大家进行VS2010/MFC的入门学习业已足够。以此教程的知识为基础,学习VS2010/MFC较为深入的内容已非难事...

weixin_40647819 ⋅ 05/23 ⋅ 0

C语言编程入门学习:人机猜拳小游戏的实现

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 05/30 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 1

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

CentOS开机启动subversion

建立自启动脚本: vim /etc/init.d/subversion 输入如下内容: #!/bin/bash## subversion startup script for the server## chkconfig: 2345 90 10# description: start the subve......

随风而飘 ⋅ 昨天 ⋅ 0

Nginx + uwsgi @ubuntu

uwsgi 安装 sudo apt-get install python3-pip # 注意 ubuntu python3默认没有安装pippython3 -m pip install uwsgi 代码(test.py) def application(env, start_response): start_res......

袁祾 ⋅ 昨天 ⋅ 0

版本控制工具

CSV , SVN , GIT ,VSS

颖伙虫 ⋅ 昨天 ⋅ 0

【2018.06.19学习笔记】【linux高级知识 13.1-13.3】

13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令

lgsxp ⋅ 昨天 ⋅ 0

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部