将脚本语言集成到C ++应用程序中[关闭]

问题描述 投票:8回答:9
我真的是C ++的新手,遇到了无法通过阅读文档来解决的问题。

我想将脚本语言嵌入到我的C ++应用程序中。该语言可以是javascript,lua或最好是python。

[我不是在寻找Boost.Python / swig之类的东西,它能够将我的c ++函数/类包装到python接口,而是一个python_evaluate_and_return_result_as_variable("my_code");函数。

我有一堆包含一些整数的结构:

struct my_integers { int a; int b; int c; int d; int e; };

现在我想用这些整数做一些数学运算,例如:

i.a = i.c * i.e;

我想做的数学将来会发生很大变化,我需要其他人,然后我才能在不访问c ++代码的情况下更改数学。

我正在考虑这样的代码结构:

    我初始化我的结构并用起始值填充它
  1. [我加载了一个外部python函数,可以说“ my_python_function”,它将结构作为参数,并在返回之前对其进行数学处理。
  2. 我得到的结构像i = my_python_function_cppwrapper(i)
  • 这样有可能吗?我为此做了很多搜索,但我似乎唯一发现的是提供c ++-> python(或相反)功能的包装器,而没有与变量真正交互。

    非常感谢您的帮助,罗宾。

  • c++ python scripting embedding
    9个回答
    8
    投票
    为什么不使用Boost.Python?您可以将数据类公开给Python并执行here中所述的脚本/函数。

    8
    投票
    Python文档在C或C ++应用程序中的embedding Python上有一个页面。

    6
    投票
    [如果只想从C / C ++运行Python脚本,则使用the Python C API。在您的C / C ++代码中:

    PyRun_SimpleString("import math; x = math.sqrt(2 * 2)");

    对于更复杂的事情,您将不得不查看API文档,但这非常简单。    

    2
    投票
    如何嵌入JavaScript引擎,例如V8

    1
    投票
    不要忘记嵌入式脚本语言的祖父-tcl。

    tcl具有很好的c ++包装器(在boost.python上建模),这使得调用和将回调连接到您的代码变得微不足道了


    1
    投票
    Lua的效果也很好,特别是因为它很小,并且符合ANSI规范,内存占用量少,并且具有出色的Wiki和消息列表。如果您需要更高的速度,可以使用x86 32和64位的jit版本(luajit)。绑定可以使用一系列工具/库来完成,例如swig或lunar(Wiki列出了所有工具/库)。我可以看到的唯一问题是绑定结构成员,以便可以直接引用它们(即:struct.member = 4),尽管可以使用将get和set方法绑定到变量名的元表来设置它。

    1
    投票
    [您说您不是在寻找某种在Python接口中包装C ++函数/类的东西,但是如果您希望Python代码能够引用您的C ++ my_integers结构的成员,则

    是] >将C ++类包装在Python接口中。当然,您可以随意包装任意数量的类-在本示例中,您将包装my_integers,然后embed a Python interpretermy_integers做一些事情。


    1
    投票
    对于您所描述的简单的事情,您可以为自己的“小语言”实现一个解释器。您甚至可以将其称为“ Robin”语言。 ;-)

    1
    投票
    我建议使用

    Lua

    © www.soinside.com 2019 - 2024. All rights reserved.