繁体   English   中英

C ++中的“评估函数”

[英]“Evaluate function” in C++

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

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

感谢您的回答。

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

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

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

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

如果您实际上需要更多限制的东西,例如评估可能以C ++格式表示的数学表达式或逻辑谓词的能力,也许是读取或设置某些值,那么可以使用各种更有限和专门的库以及嵌入式解释器。 甚至还有用于创建此类解析器的库,例如boost spirit库。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM