当前位置:  开发笔记 > 编程语言 > 正文

使C++应用程序可编写脚本

如何解决《使C++应用程序可编写脚本》经验,为你挑选了3个好方法。

我的程序中有几个函数看起来像这样:

void foo(int x, int y)

现在我希望我的程序采用如下字符串:

foo(3, 5)

并执行相应的功能.实现这一目标最简单的方法是什么?

当我直截了当地说,我的意思是合理的可扩展性和优雅,但编码不应该花太长时间.

编辑:

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



1> Simon Steele..:

您可以非常简单地嵌入Python,这将为您提供一种非常强大,可扩展的脚本来编写程序.您可以使用以下内容轻松(或多或少)将您的C++代码公开给Python:

提升Python

痛饮

我个人使用Boost Python,我很满意,但编译速度慢,难以调试.



2> Daniel Sloof..:

你可以看看Lua.



3> Johannes Sch..:

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

使用纯C++,我可能会使用一个解析器生成器,它将获得令牌和语法规则,并将给我一个完全可以解析给定函数调用语言的C代码,并为我提供该调用的语法树.flex可用于标记输入,bison并可用于解析标记并将其转换为语法树.除此方法之外,Boost Spirit也可用于解析函数调用语言.我从来没有使用过任何这些工具,但已经使用过它们的程序,因此我有点知道如果我必须解决这个问题我会用什么.

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

func_name arg1, arg2

然后你可以使用:

std::istringstream str(line);
std::string fun_name; str >> fun_name;
map[fun_name](tokenize_args(str));

地图将是一个

std::map)> > map;

哪个将填充程序开头的功能.tokenize_args只是将参数分开,并将它们的向量作为字符串返回.当然,这是非常原始的,但我认为如果你想要的只是一种调用函数的方法是合理的(当然,如果你想要真正的脚本支持,这种方法是不够的).

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有