最近在看Luatinker的源代码,打算自己改(仿写)写搞一个简单的封装C++和LUA的结合的库,结果发现其实麻烦和困惑比想象的多。

比如这些点:

1)有时候使用模板的时候,引用会退化。

classtype &,经过模板参数后,会退化为class type,这个在LuaTinker的实现里面就有问题,你会发现tinker的引用就没有起到作用。

这个我打算研究一下《C++模板》

2)基本(非object)类型(比如int)的应用和指针的使用问题?

因为大部分C++ to LUA的参数传递都是使用lua_pushnumber这类函数,这类函数肯定不会考虑什么引用问题的。而Luatinker在对于object类型,可以使用引用(当然他的引用其实无效,见问题1)和指针,但对于非object类型,LuaTinker没有提供相应的方法帮助你,使用相关方法是在class_name的地方不会得到有效的类型名称,而且Lua内部并没有注册这些基本类型的userdata,所以其实你用LuaTinker你其实不能使用基本类型的指针。

3)const的指针和引用没有得到正确处理。

由于LuaTinker内部对于指针和引用的保存处理都是一个void *,所以其实LuaTinker并没有考虑对于const的指针和引用应该如何处理,也就是是说,其实经过LuaTinker的绑定,其实会破坏const 的特性。LuaTinker对于类的metatable定义的修改函数,都是可以修改类的成员的。这其实挺烦人(危险)的。

4)Lua种如何使用指针或者引用?

把指针或者引用(引用其实还是只能包装成指针)作为user data给Lua使用当然是可以的,但问题是Lua,至少是LuaTinker是不能自己直接创建一个指针(引用就先不扯淡了),当然你直接定义一个类型叫某某类的指针当然也可以。但大部分Lua的绑定库没有这样恶心自己。如果Lua不能直接创建一个指针,那么你得到一个指针的方法就只剩下了依靠函数返回值了(你把指针绑定在某个table上(包括全局)使用,其实还是使用函数返回值)。

但确实是这样吗?

5)指针的指针,和指针的引用这样的参数能使用吗?

LuaTinker 应该没考虑这类问题,呵呵。我考虑的是以Lua的机制,这种参数是不是也应该是没有用处的。

所以是不是指针和引用其实只能在返回值上使用?这个和问题4异曲同工。

6)多重继承的问题,

LuaTinker没有考虑这个问题,当然这个问题不是无解,只是麻烦程度而已。

而且其实这部分问题不光是Luatinker一个人的问题,大部分C++和LUA绑定库都有类似问题,比如Luabind,luaplus,tolua++等。

毕竟C++和Lua是两种思路差别很大的语言,我目前的困惑还挺大的。看来只有慢慢来了。

【本文作者是雁渡寒潭,本着自由的精神,你可以在无盈利的情况完整转载此文档,转载时请附上BLOG链接:http://www.cnblogs.com/fullsail/,否则每字一元,每图一百不讲价。对Baidu文库和360doc加价一倍】

LUA和C++绑定的一些天然的麻烦的更多相关文章

  1. cocos2dx lua binding ,cocos2dx 绑定lua测试

    前面2篇分别简单介绍 手动bind C++ 类和lua:http://blog.csdn.net/chenee543216/article/details/12074771 使用tolua++简化工作 ...

  2. 使用Lua脚本语言开发出高扩展性的系统,AgileEAS.NET SOA中间件Lua脚本引擎介绍

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  3. cocos2d-x的lua脚本加载CocostudioUI两种方式

    前言 当前版本使用的是quick cocos2dx lua 3.3.UI使用cocostudio编辑器1.6.0.我们在程序里面可以使用两种方式进行解析UI.开始的时候用的是quick的方法, 结果遇 ...

  4. Win32下 Qt与Lua交互使用(三):在Lua脚本中connect Qt 对象

    话接上文.笔者为了方便使用Lua,自己编写了一个Lua的类.主要代码如下: QLua.h #ifndef QLUA_H #define QLUA_H // own #include "inc ...

  5. [cocos2dx] lua注册回调到c++

    思路 像所有语言一样,绑定回调主要是执行的任务执行到特定情形的时候,调用对用回调方法. 这里也一样.核心思路是,当c代码执行到特定特定情形的时候,调用lua的方法 我这里使用的是用lua_stack直 ...

  6. cocos2dx spine之一 :spine缓存 (c++ & lua)

    cocos2dx版本为3.10 1.在使用spine的过程中,发现了一个比较严重的问题:每次创建SkeletonAnimation的时候都会很卡,即使是使用同一个骨骼数据skeletonData. 跟 ...

  7. lua C++ wrapper

    背景 最近在研究lua的c++绑定库,使用过一下几个 luabind 问题:没人维护 https://github.com/vinniefalco/LuaBridge https://github.c ...

  8. 在Unity中使用Lua脚本

    前言:为什么要用Lua首先要说,所有编程语言里面,我最喜欢的还是C#,VisualStudio+C#,只能说太舒服了.所以说,为什么非要在unity里面用Lua呢?可能主要是闲的蛋疼.....另外还有 ...

  9. Lua与游戏的不解之缘

    本文转载自秦元培博客:blog.csdn.net/qinyuanpei 一.什么是Lua? Lua 是一个小巧的脚本语言,巴西里约热内卢天主教大学里的一个研究小组于1993年开发,其设计目的是为了嵌入 ...

随机推荐

  1. jps

    jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上 ...

  2. python中的MySQL数据库操作 连接 插入 查询 更新 操作

    MySQL数据库 就数据库而言,连接之后就要对其操作.但是,目前那个名字叫做qiwsirtest的数据仅仅是空架子,没有什么可操作的,要操作它,就必须在里面建立“表”,什么是数据库的表呢?下面摘抄自维 ...

  3. ASP.NET中如何删除最近打开的项目和文件的记录

    ASP.NTET中总是保留最近打开的项目和文件的记录,甚至是已删除的它也不删.下面介绍几种删除的方法: 第一种:建立一个bat文件,以后双击即可清除,内置代码如下: @echo off@REG Del ...

  4. POJ 2828 Buy Tickets (线段树 单点更新 变形)

    题目链接 题意:有N个人排队,给出各个人想插队的位置和标识,要求输出最后的序列. 分析:因为之前的序列会因为插队而变化,如果直接算时间复杂度很高,所以可以用 线段树逆序插入,把序列都插到最后一层,le ...

  5. BestCoder Round #2 1001 (简单处理)

    题目链接 题意:给N条信息,每个信息代表有x个人从开始的时间 到 结束的时间在餐厅就餐, 问最少需要多少座位才能满足需要. 分析:由于时间只有24*60 所以把每个时间点放到 数组a中,并标记开始的时 ...

  6. HDU 4635 Strongly connected (强连通分量)

    题意 给定一个N个点M条边的简单图,求最多能加几条边,使得这个图仍然不是一个强连通图. 思路 2013多校第四场1004题.和官方题解思路一样,就直接贴了~ 最终添加完边的图,肯定可以分成两个部X和Y ...

  7. I.MX6 默认打开 USB adb

    /***************************************************************************** * I.MX6 默认打开 USB adb ...

  8. 【 D3.js 高级系列 — 7.0 】 标注地点

    有时需要告诉用户地图上的一些目标,如果该目标是只需要一个坐标就能表示的,称其为"标注". 1. 标注是什么 标注,是指地图上只需要一个坐标即可表示的元素.例如,在经纬度(116, ...

  9. C++类的构造、拷贝构造、析构函数等

    1: 一个空的class在C++编译器处理过后就不再为空,编译器会自动地为我们声明一些member function,如果你写 class A{}; 编译器处理后,就相当于: class A{ pub ...

  10. shell 的判断与比较

    1  shell 的$! ,$?, $$,$@ $n        $1 the first parameter,$2 the second... $#        The number of co ...