最近在看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. openCv 图像顺时针、逆时针旋转

    通过下面这个函数调用 Rotate90(workImg,270); //顺时针旋转 Rotate90(workImg,90); //逆时针旋转 实现,其实用该函数旋转任意度数对正方形图都ok,只是长方 ...

  2. 三个特殊资源目录 /res/xml /res/raw 和 /assets

    在android开发中,我们离不开资源文件的使用,从drawable到string,再到layout,这些资源都为我们的开发提供了极大的便利,不过我们平时大部分时间接触的资源目录一般都是下面这三个. ...

  3. PHP Redis 集群封装类

    <?php /**  * Redis 操作,支持 Master/Slave 的负载集群  *  * @author V哥  */ class RedisCluster{        // 是否 ...

  4. Android Activity形象描述

    Activity就是形象的说就是一个容器,在里面放置各种控件(按钮,文本,复选框等),就形成了软件的界面~ Activity是可见的,如果不加任何控件的话,那么就像Windows中的空白窗体一样 通过 ...

  5. mysql 行列动态转换(列联表,交叉表)

    mysql 行列动态转换(列联表,交叉表) (1)动态,适用于列不确定情况 create table table_name( id int primary key, col1 char(2), col ...

  6. 面试题_66_to_75_Java IO 和 NIO 的面试题

    IO 是 Java 面试中一个非常重要的点.你应该很好掌握 Java IO,NIO,NIO2 以及与操作系统,磁盘 IO 相关的基础知识.下面是 Java IO 中经常问的问题. 66)在我 Java ...

  7. 实际举例C#引用类型和值类型的区别<网摘>

    我们都知道,c#的两大数据类型分别为值类型和引用类型.很多人或许闭着眼睛都能说出值类型包括简单类型.结构体类型和枚举类型,引用类型包括自定义类.数组.接口.委托等,但是当被问及到二者之间的联系和区别, ...

  8. UVa 10791 (唯一分解) Minimum Sum LCM

    题意: 输入n,求至少两个正整数,使得这些数的最小公倍数为n且和最小. 分析: 设n的分解式为,很显然单独作为一项,和最小. 这里有两个小技巧: 从2开始不断的除n,直到不能整除为止.这样就省去了素数 ...

  9. bzoj1601: [Usaco2008 Oct]灌水

    经典延伸最小生成树问题... #include<cstdio> #include<cstring> #include<cctype> #include<alg ...

  10. BZOJ3858: Number Transformation

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3858 题解:设第i个数为i*a;第i+1个数为(i+1)*b.则(i+1)*b>i*a; ...