C++ 制作C++;应用程序可编写脚本

C++ 制作C++;应用程序可编写脚本,c++,string,scripting,C++,String,Scripting,我的程序中有几个函数如下所示: void foo(int x, int y) 现在,我希望我的程序采用如下字符串: foo(3, 5) 并执行相应的函数。实现这一点最简单的方法是什么 当我说直截了当时,我指的是合理的可扩展性和优雅性,但编写代码不应该花费太长时间 编辑: 虽然使用一个真正的脚本语言当然会解决我的问题,但我仍然想知道在纯C++中是否有一种快速的实现方法。 你可以查看一下。 你可以很简单地嵌入Python,这将给你一个真正强大的、可扩展的脚本程序的编写方法。您可以使用以下方法轻松

我的程序中有几个函数如下所示:

void foo(int x, int y)
现在,我希望我的程序采用如下字符串:

foo(3, 5)
并执行相应的函数。实现这一点最简单的方法是什么

当我说直截了当时,我指的是合理的可扩展性和优雅性,但编写代码不应该花费太长时间

编辑:


虽然使用一个真正的脚本语言当然会解决我的问题,但我仍然想知道在纯C++中是否有一种快速的实现方法。

你可以查看一下。

你可以很简单地嵌入Python,这将给你一个真正强大的、可扩展的脚本程序的编写方法。您可以使用以下方法轻松地(或多或少)将C++代码暴露给Python:

我个人使用Boost Python,对此我很满意,但它编译速度慢,调试也很困难。

正如Daniel所说:

脚本语言如Lua和Python将是用于将C++库绑定在一起的最常用的脚本语言。


<>你必须在C++应用程序中添加脚本接口。此接口的构建显然取决于您选择的脚本语言。

如果您只希望通过文字名称调用函数,则可以使用特定于链接器的函数

在兼容POSIX的操作系统(如Linux)上,可以使用dlopen()和dlsym()。您只需解析输入字符串并计算出函数名和参数。然后,您可以要求链接器使用dlsym()按名称查找函数

然而,在Windows上,这些函数是不可用的(除非周围有一些POSIX环境,比如Cygwin)。但是您可以使用Windows API


您可以在这里查看有关这些内容的详细信息:

我也会选择脚本语言的答案

使用纯C++,我可能会使用一个语法分析器,它将得到令牌和语法规则,并给我C代码,它可以解析给定的函数调用语言,并提供给我一个调用的语法树。可用于标记输入,并可用于解析标记并将其转换为语法树。除此之外,还可以使用该方法来解析函数调用语言。我从来没有使用过这些工具中的任何一种,但是我在使用它们的程序中工作过,因此我知道如果我必须解决这个问题,我会使用什么

对于非常简单的情况,您可以将语法更改为:

func_name arg1, arg2
然后您可以使用:

std::istringstream str(line);
std::string fun_name; str >> fun_name;
map[fun_name](tokenize_args(str));
这张地图将是一张地图

std::map<std::string, boost::function<void(std::vector<std::string>)> > map;
std::map;

它将在程序开始时用函数填充
tokenize_args
只需分离参数,并将它们作为字符串返回向量。当然,这是非常原始的,但我认为如果您只想通过某种方式调用函数是合理的(当然,如果您想要真正的脚本支持,这种方法是不够的)。

您的系统必须“接受字符串”吗?你可以在你的应用程序中公开COM(或CORBA,或者任何)接口,并有任何生成这些命令的调用直接调用你的应用程序。Fabio Lombardelli的

< P> C++反射[2 ]通过模板元编程技术为C++提供了完全的重新解释。虽然它完全符合C++标准,但它要求程序员注释类,以便使它们成为反射< /P>


否则,您可能需要一个我认为CERN提供的函数指针哈希表,一个C/C++解释器,可以嵌入到您的应用程序中以提供脚本功能。

看看Lua-要做什么???该页面对于描述如何嵌入该语言几乎毫无用处。即使是手册的第3页()也对OP没有帮助。“使用lua”正在成为对类似问题的下意识反应。我会选择boost::spirit,因为您将学到很多关于解析器和模板元编程的知识。