![]() |
1
32
下面是比语言绑定更面向C++的集成:
对于你来说,如果你真的想在C++中编写脚本模块,并且很容易把它暴露给脚本语言, 我建议你和猎鹰一起去 . 它完全是用C++编写的,所有的模块/库都是这样编写的。 |
![]() |
2
21
你问的是相反的问题,听起来有点复杂。一个生成.h文件和.so文件的脚本引擎并不是真正的脚本引擎,而是一个编译器!在这种情况下,你可以使用C++。 脚本引擎不是这样工作的。向它们传递一个脚本和一些回调,这些回调提供了一组可以从脚本调用的函数,并且引擎解释脚本。 |
![]() |
3
21
试试lua: http://www.lua.org/
使用tolua++生成绑定: http://www.codenix.com/~tolua/ 它以一个清理过的头作为输入,并输出一个c文件来完成这项工作。很容易,很高兴和你一起工作。 为了在C++中使用Lua对象,我将采用像(字段、SETFEAR、CALL方法、方法、字段)这样的方法编写通用代理对象。 如果你想要一个dll,你可以把.lua作为一个资源(在Windows中,我不知道什么是Linux的合适等价物),在你的DllMain上用lua代码初始化你的代理对象。 然后,c++代码可以使用proxy对象来调用lua代码,在proxy中可以使用一些内省方法来简化此任务。 您只需为每个要编写的lua库重用代理对象,只需更改提供给它的lua代码。 |
![]() |
4
13
|
![]() |
5
5
我是IKEMAGE的作者,是IO语言的C++绑定库。(我不是Io的作者。) http://github.com/dennisferron/LikeMagic 我与LeimEaMo的一个明确目标是在两个方向上完成和完全的C++互操作性。LigMeEao将将本地IO类型封为C++类型(包括STL容器和艾奥的本机列表类型之间的转换),它将代表IO中的C++类、方法、字段和数组。你甚至可以传递一个Io代码块 外面的 在IO脚本中封装C++类型用于消费是简单、快速和容易的。从C++访问脚本对象确实需要像您所描述的“EVE”函数,但是基于模板的类型转换和封送处理可以很容易地访问执行脚本字符串的结果。并且有上述能力将IO块()对象转换为C++函子。 目前,该项目仍处于早期阶段,尽管已全面投入运营。我仍然需要做一些事情,比如记录它的构建步骤和依赖关系,它只能用GCC 4.4.1+(不是微软Visual C++)来构建,因为它使用了MSVC中还没有支持的C++ 0x特性。但是,它完全支持Linux和Windows,并且计划使用Mac端口。 现在坏消息是:让脚本产生.h文件和.c++.dll文件,这不仅需要 编者 (某种)但也必须是 . 这是因为(在许多脚本语言中,尤其是在Io中)对象的方法和字段直到运行时才知道——在Io中,甚至可以从活动对象中添加和删除方法!一开始我想说的是,你要求这样做的事实让我怀疑你是否真的不明白什么是动态语言 是 . 但我确实相信一种设计方法,你首先试着想象一种理想的或最简单的可能的方法,然后再从那里回到实际可行的地方。所以我承认,从易用性的角度来看,你所描述的听起来更易用。
从包装器函数的调用方的角度来看,我承认这是一个看起来更干净的代码。但是如果这是您想要的,为什么不在脚本语言中使用反射并从存储在脚本对象中的方法列表中生成一个.h文件呢?这种反射可以是 easily done in Io . 在某个时候,我计划整合 OpenC++ source-to-source translator |
![]() |
6
2
你可以用Lua来实现这一点,但是如果你有很多类,你会希望SWIG或toLua++这样的工具为你生成一些粘合代码。 这些工具中没有一个会处理你的问题的不寻常的部分,那就是有一个.h文件隐藏在脚本语言中,让你的C++代码调用脚本而不知道这是脚本。为此,您必须执行以下操作:
如果您自己决定这样做,编写胶粘代码将LUA表转换成C++类(以便Lua代码看起来像C++)到程序的其余部分是相当简单的。在另一个方向上,在Lua中包装C++(让C++对象查看像Lua值的脚本)是AsS中的一大麻烦。 不管你做什么,你都有一些工作要做。 |
![]() |
7
1
谷歌的 V8 engine 是用C++编写的,我希望你可以把它集成到一个项目中。他们说要这么做 in this article |
![]() |
8
1
问得好,我自己也经常想到这个问题,可惜这类事情没有简单的解决办法。如果你在Windows上(我想不是),那么你可以通过在C++和VB中创建COM组件(考虑到脚本语言)来实现这样的事情。这种对话是通过COM接口进行的,这是在不同语言之间进行互操作的一种好方法。基于.NET的语言也一样,它们可以在它们之间进行互操作。 我也很想知道C++是否存在这样的东西,最好是开源的。 |
![]() |
9
0
|
![]() |
10
0
|