多语言展示
当前在线:615今日阅读:113今日分享:31

如何自动生成lua绑定C++的代码?

1. 这个py文件就是LLVM中拿出来的,是libclang的一个python绑定,利用的python的ffi机制(ctypes)写的,你可以在LLVM源码里找到它。2. 这应该所有c++编译器的前端都有这个功能,比如这个简单点的robertoraggi/cplusplus · GitHub,atomic engine就拿它写了个绑定生成工具。3. luabind,swig等等轮子好像挺多的,符合自己的需求就行。\. 这个py文件就是LLVM中拿出来的,是libclang的一个python绑定,利用的python的ffi机制(ctypes)写的,你可以在LLVM源码里找到它。2. 这应该所有c++编译器的前端都有这个功能,比如这个简单点的robertoraggi/cplusplus · GitHub,atomic engine就拿它写了个绑定生成工具。3. luabind,swig等等轮子好像挺多的,符合自己的需求就行。发布于 2015-08-27 1 条评论 感谢分享 收藏 • 没有帮助 • 举报 • 作者保留权利6赞同  反对,不会显示你的姓名徐波 资深级游戏开发者 博客: 战魂小筑6 人赞同谢邀 tolua++的pkg文件支持直接解析C++源码的, 你可以试下, 他那个已经是差不多比较简单的直接解析的方案了 我用luabridge配合一个配置文件, 自动生成绑定, 只要给出要绑定的名字, 就可以绑定了, 已经很简单了 不推荐SWIG, 效率低, 游戏大多还是用tolua++的… 显示全部谢邀tolua++的pkg文件支持直接解析C++源码的, 你可以试下, 他那个已经是差不多比较简单的直接解析的方案了我用luabridge配合一个配置文件, 自动生成绑定, 只要给出要绑定的名字, 就可以绑定了, 已经很简单了不推荐SWIG, 效率低, 游戏大多还是用tolua++的绑定反观, 题主想全自动绑定, 其实有时未必是这样的需求, 有些函数不需要注入到lua中, 所以DSL还是主流做法发布于 2015-08-28 添加评论 感谢分享 收藏 • 没有帮助 • 举报 • 作者保留权利2赞同  反对,不会显示你的姓名知乎用户 业余造轮子2 人赞同class Module { public: Module(State& state) { state << global << key('Func') << state.Adapt(Wrap(this, &Module::Func)) << endtable; } void Func(State& request, int a, std::string b, double c) { cout << a << b << c; } }; 使用: ZLuaS… 显示全部class Module {public:      Module(State& state) {           state << global << key('Func') << state.Adapt(Wrap(this, &Module::Func)) << endtable;      }      void Func(State& request, int a, std::string b, double c) {              cout << a << b << c;      }};使用:ZLuaState state;Module module(state);Ref ref = state.Load('Func(1, 'abc', 3.0)');state.Call(ref);这是我自己写的一个简单地将C++成员函数注册到lua state的库,只需要使用state.Adapt(Wrap(this, 成员函数地址))就可以直接注册。所有的参数都是利用变长参数模板自动解析的。如果仅仅做“绑定函数到LUA“这么简单的事情的话,自己搞个PL其实过于麻烦了。打算近期把这个库发到github上,无奈访问不了。。编辑于 2015-08-27 1 条评论 感谢分享 收藏 • 没有帮助 • 举报 • 作者保留权利1赞同  反对,不会显示你的姓名富二代 钱太多也很痛苦1 人赞同swig 显示全部swig发布于 2015-08-28 添加评论 感谢分享 收藏 • 没有帮助 • 举报 • 作者保留权利1赞同  反对,不会显示你的姓名匿名用户1 人赞同最近在调研SWIG, 号称是完全兼容ANSI C++ 的语法解析, 并且target language很丰富。需要输入一个接口文件。不过通常都是直接include head.hxx 了事。 显示全部最近在调研SWIG, 号称是完全兼容ANSI C++ 的语法解析, 并且target language很丰富。需要输入一个接口文件。不过通常都是直接include head.hxx 了事。发布于 2015-08-27 添加评论 感谢分享 收藏 • 没有帮助 • 举报 • 作者保留权利1赞同  反对,不会显示你的姓名匿名用户1 人赞同我举个例子,一个对象new出来后如果传给某构造函数参数,则生命周期和该对象绑定了,如果没有这样调用的话则需要自己delete掉来管理。你如何管理对象生命周期 再举个例子,有个对象但是他的某些函数执行时需要在特定线程执行的,而lua是单线程的。 某些对象… 显示全部我举个例子,一个对象new出来后如果传给某构造函数参数,则生命周期和该对象绑定了,如果没有这样调用的话则需要自己delete掉来管理。你如何管理对象生命周期再举个例子,有个对象但是他的某些函数执行时需要在特定线程执行的,而lua是单线程的。某些对象的函数里面有delete this的,如何管理lua对象的生命周期。再比如说我限定某对象只能放栈上,无法用new,咋办。再举个例子,某些对象创建要用create,而某些用new,怎么自动处理。总结下,某些可以用手动处理,但是自动处理起来很麻烦。如果本来是些简单的值语义的对象,那随便处理都可以。
推荐信息