2011-05-19 130 views
1

我想知道C++中是否存在“评估”函数,如Matlab函数。C++中的“评估函数”

实际上,我需要一个可以像命令行一样解释字符串的函数。

感谢您的答案。

+2

嗨,骑士85!欢迎来到Stack Overflow。如果你可以包含一个链接到Matlab的'evaluate'函数的文档,那将会很有帮助。既然我不知道它做了什么,我不能告诉你C++的功能是什么样的。 – 2011-05-19 17:00:47

+0

['eval(expression)'](http://www.mathworks.com/help/techdoc/ref/eval。html)“执行*表达*,一个包含任何有效的MATLAB表达式的字符串。”你想要一个可以执行任意MATLAB表达式的C++函数吗?还是你想要一个可以执行任意C++表达式的C++函数?或者是其他东西? – 2011-05-19 17:05:32

+0

这听起来像是一个“XY问题”http://mywiki.wooledge.org/XyProblem。 @ Cavs85,请描述你的最终目标,而不仅仅是你被困在什么地方。 – 2011-05-19 17:58:41

回答

4

您可以使用system()http://linux.die.net/man/3/system

+3

这样可以让你调用一些提供'eval'风格函数的程序,让我们不要将它与标准C++表达式求值器混淆。 – 2011-05-19 17:04:48

+0

windows上还有'system()'吗? Q提到'visual studio'。 – 2011-05-19 17:09:06

+0

@Ben,由于OP要求“可以像命令行一样解释字符串的函数”,我使用了'system()'。你是正确的,它不等效于Matlab的'eval' – 2011-05-19 17:09:56

6

如果你实际上是试图“评估”正在运行的C++应用程序中的C++源代码,则基本没有 - 它不是由语言指定的功能。

对于C++子集(例如CInt,Ch和UnderC),有解释器 - 如果它们是相对简单的,它们可以运行C++程序。或者,可以将一些嵌入到已编译的C++程序中,以允许一些运行时源代码评估,但是访问权限有限,并且无法更改预编译的代码及其变量。

也有可能对正在运行的程序调用编译器和动态加载/链接得到的库,但是这是一个非常不寻常的做法,不是没有性能,安全性和互操作性问题:

  • 创建编译器,编译和链接的新过程是一个相对资源匮乏且运行缓慢的操作,但是一旦库连接起来,新代码就可以以正常的脱机函数调用速度执行,外部过程
    • 确保路径和编译器可执行文件的名称不能被恶意输入被改变成没有恶意软件代替或感染编译器
    • 上即时源代码不包含像system()语句程序
    • exec()unlink()呼叫,滥用网络连通性,咀嚼无端CPU /存储器/描述符等
  • 预编译的C++程序不能被修改或容易/深受新链接的码探测,所以主新行为的机制必须已经设计到预编译的应用程序中:期望f或新近可访问的变量,函数和工厂方法/虚拟调度。

如果你确实需要更多的东西有限,像能力评估数学表达式或逻辑谓词,可能在C++表示 - 源的风格,或许读取或设置你的一些价值观,那么各种更加有限,专业图书馆和嵌入解释可用。甚至有创建这种解析器的库,例如boost spirit库。最后,其他语言(Lua,Ruby,Python,Perl,TCL等)的解释器可能嵌入C++应用程序中,体现各种互操作性和安全性的方法。

+0

+1:很好的答案。 – 2011-05-19 17:58:51