C++中的"评估函数"

Cav*_*s85 1 c++ string evaluation function visual-studio-2008

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

在实践中,我需要一个可以像命令行一样解释字符串的函数.

谢谢你的回答.

Ton*_*roy 6

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

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

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

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

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

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