Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;用于游戏开发的嵌入式脚本语言-can';我找不到我喜欢的东西 我急切地寻找一个快, C类语法>强> >嵌入< >强>易于包装强脚本语言嵌入到我的C++游戏中。_C++_C++11_Scripting_Game Engine - Fatal编程技术网

C++;用于游戏开发的嵌入式脚本语言-can';我找不到我喜欢的东西 我急切地寻找一个快, C类语法>强> >嵌入< >强>易于包装强脚本语言嵌入到我的C++游戏中。

C++;用于游戏开发的嵌入式脚本语言-can';我找不到我喜欢的东西 我急切地寻找一个快, C类语法>强> >嵌入< >强>易于包装强脚本语言嵌入到我的C++游戏中。,c++,c++11,scripting,game-engine,C++,C++11,Scripting,Game Engine,到目前为止,我已经尝试: 强> Lua:它是有效的,但是环绕全局C++函数是痛苦的,并且包装对象更困难。而且,我真的不喜欢Lua的语法 AngelScript:无法使其工作。初学者文档是不存在的,因为第一个示例没有编译,您必须首先构建许多附加组件。包裹C++对象和函数看起来比Lua更容易,但它仍然可以更干净。语法看起来不错 ChaiScript:无法使其工作。我在非git和GitC++11版本中都遇到了很多错误。我不想使用boost版本,因为我不想在我的项目中引入boost作为依赖项。包装看起

到目前为止,我已经尝试:

    强> Lua:它是有效的,但是环绕全局C++函数是痛苦的,并且包装对象更困难。而且,我真的不喜欢Lua的语法
  • AngelScript:无法使其工作。初学者文档是不存在的,因为第一个示例没有编译,您必须首先构建许多附加组件。包裹C++对象和函数看起来比Lua更容易,但它仍然可以更干净。语法看起来不错
  • ChaiScript:无法使其工作。我在非git和GitC++11版本中都遇到了很多错误。我不想使用boost版本,因为我不想在我的项目中引入boost作为依赖项。包装看起来很简单,语法也不错
我还调查了:

  • Pike:语法看起来不错,但我没有找到关于嵌入的文档
  • Squirrel:我不喜欢语法,嵌入/包装和Lua一样烦人,必须处理堆栈
因此:

  • 是否有好的快速类似C的语法易于嵌入易于包装的替代方案
  • 如果没有-创建脚本语言的最佳学习资源是什么?我喜欢重新发明轮子,这可能是一次有趣的学习经历

对于类似C的语法,请签出

  • 一种商用的嵌入式C解释器
  • 一个开源的C/C++解释器
  • -一种“具有类似C的语法的简单、无类型、32位扩展语言”
可能不适合您,但由于这个问题可能会出现一个其他人会感兴趣的备选方案列表,我为您提供了一个类似Javascript的语法。包装可以很简单,但需要采用Qt框架来完成,特别是信号和插槽的概念


还有,来自Firefox的JS引擎。

你可以考虑看Python:


我支持使用python作为脚本语言,我以前在我的程序(不是游戏)中使用过python,对此非常满意。如果您想尝试创建自己的脚本,您可以尝试使用JavaScript。脚本引擎可以嵌入到您的程序中,并且有关于如何嵌入的文档。

除了其他人的建议之外,还有一些被认为是实验性的。编写脚本语言并不容易,但现在您可以求助于,至少在后端是这样。编程语言的设计在C++的“算法+数据结构=程序”中简单地讨论过(但请检查内容主题,在删除的最新版本中),如果你在谷歌上搜索作者,你肯定会和其他一些关于这个主题的出版物相关联。

< P>你可以使用C++,通过类似的方式

<>你得到熟悉的语法和易于集成的静态C++程序。


您可能对Dao(,)感兴趣

Dao在标准C中以最小的依赖性实现(如果您排除了可选的模块和工具)。它是轻量级和高效的,具有良好的嵌入和扩展支持。它调用C函数的接口不是基于堆栈的。下面是一个简单的例子:

#include "stdio.h"
#include "daoValue.h"
static void Square( DaoProcess *proc, DaoValue *param[], int nparam )
{
    daoint num = param[0]->xInteger.value;
    DaoProcess_PutInteger( proc, num*num );
}
int DaoOnLoad( DaoVmSpace *vmspace, DaoNamespace *nspace )
{
    DaoNamespace_WrapFunction( nspace, Square, "Square( num : int ) => int" );
    return 0;
}
您可能注意到,没有用于检查包装函数中的参数类型的样板代码。这是因为此函数注册为
Square(num:int)=>int
,这意味着此函数只能接受整数作为参数,并且由Dao运行时保证

您可能还想知道,它还有一个基于Clang的工具,用于自动/半自动生成C/C++绑定


免责声明:我是此语言的作者。

您可能对

ObjectScript,简称OS,是一种新的编程语言。它是免费的、跨平台的、轻量级的、可嵌入的和开源的。它结合了多种语言的优点,包括JavaScript、Lua、Ruby、Python和PHP。操作系统具有Javascripts的语法、lua的“多结果”功能、Ruby的语法shugar以及PHP和Ruby的神奇方法,甚至更多

ObjectScript使用的最小程序可能是这样的

#include <objectscript.h>
using namespace ObjectScript;
int main(int argc, char* argv[])
{
    OS * os = OS::create(); // craete ObjectScript instance
    os->require("main.os"); // run ObjectScript program
    os->release();          // release the ObjectScript instance
    return 0;
}
#包括
使用命名空间ObjectScript;
int main(int argc,char*argv[])
{
OS*OS=OS::create();//craete ObjectScript实例
os->require(“main.os”);//运行ObjectScript程序
os->release();//释放ObjectScript实例
返回0;
}

作为参考很好,但OP不想在他的项目中引入boost作为依赖项。@PaperBirdMaster不想使用boost.Python,因为“它引入了对boost的依赖项”提醒我任何脚本语言都会引入依赖项,而使用BCP只能隔离Boost所需的部分。我基本上同意你@TemplateRex的观点,但告诉OP,是他设置了限制;)你在用什么编译器?ChaiScript 5目前不支持VC++,因为VC++缺乏基本的C++11功能…自己创建脚本语言是一种很好的学习体验。虽然这需要一些时间,但有相当好的工具可以减轻痛苦。对于前端,我建议看一看:“我不喜欢语法”,这不是避免使用经过良好测试、设计良好的语言的好理由。这是一个幼稚的理由,不是一个专业的理由。您将永远无法开发一种基础良好、经过良好测试并广泛使用的语言,甚至无法开发出更新的脚本语言,更不用说像Lua这样被广泛使用的老备用语言了。如果您在语法方面有一些问题,