C ++中的“评估函数”

时间:2011-05-19 16:57:21

标签: c++ visual-studio-2008 string function evaluation

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

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

感谢您的回答。

2 个答案:

答案 0 :(得分:6)

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

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

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

  • 为编译器创建一个新进程,编译和链接是一个相对资源匮乏和缓慢的操作,但是一旦库链接,新代码就可以以正常的外线函数调用速度执行
  • 执行外部流程的常见问题
    • 确保路径和编译器可执行文件名不能被程序的恶意输入更改
    • 没有恶意软件替代或感染编译器
    • 即时源代码不包含system()exec()unlink()调用,滥用网络连接,咀嚼无保护的CPU /内存/描述符等语句。
  • 预编译的C ++程序无法被新链接的代码修改或轻松/深入探测,因此新行为的主要机制必须已经设计到预编译的应用程序中:对新访问变量的期望,功能和工厂方法/虚拟调度。

如果你真的需要一些更有限的东西,比如评估数学表达式或逻辑谓词的能力,可能用C ++表示 - 源代码风格,也许是读取或设置你的一些值,那么更多提供有限的专业库和嵌入式解释。甚至还有用于创建此类解析器的库,例如boost spirit库。

最后,其他语言的解释器 - Lua,Ruby,Python,Perl,TCL等 - 可以嵌入到C ++应用程序中,采用各种互操作性和安全性方法。

答案 1 :(得分:4)

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