【问题标题】:How can I convert string to code at run time如何在运行时将字符串转换为代码
【发布时间】:2013-09-12 13:45:17
【问题描述】:

我正在生成包含if else 表达式的字符串。我想知道我是否可以在运行时执行这个表达式?这是一个例子:

string s = "if(x > 10) {Fly = true;} else {Fly = False;}";
Execute (s); 

甚至有可能做到这一点吗?

【问题讨论】:

标签: c++ string runtime


【解决方案1】:

可以使用 TCC (http://bellard.org/tcc/)。它允许在运行时本地编译和运行代码。另一种方法是使用解释器,那里有很多解释器(LUA、Python 等,参见列表wiki)。

【讨论】:

  • 哦,听起来很有趣,当然,如果它会更好的话。我其实知道 pythong 并且我开始认为它是多么复杂。
  • 还有一个问题 Rax。我可以将它包含在我的代码中,对吗?例如在 for Loop 我可以使用 expression 来编译字符串
  • 是的,您可以编译任何 c 代码,包括表达式和任何 c 语言功能。根据您的需要,您可以制作一个接受参数并计算返回评估表达式的 c 函数。 TCC 将编译该代码,您可以获得指向该函数的指针并随时评估它。我认为TCC中的所有代码都是由上下文绑定的,所以只要初始化上下文,编译后的代码就可以执行。
  • 但是我不鼓励你在生产项目中使用它,因为我不知道它是否被大规模使用并且它可能会出现问题(内存泄漏、崩溃等)。对于生产项目,你应该使用像 LUA 这样的脚本语言,如果你愿意,你甚至可以运行 PYTHON 代码,检查ironpython.net
  • 或者boost.org/doc/libs/1_54_0/libs/python/doc/index.html,如果你不想要托管代码。
【解决方案2】:

一个人不会简单地解释 C/C++ 代码... AFAIK 你就是不能。
(除非您编译另一个二进制文件并从 cmd 行运行它...)

注意:你可以写

fly = (x > 10);

而不是

if(x > 10){
    fly = true;
}else{
    fly = false;
}

【讨论】:

    【解决方案3】:

    没有。 C++ 是一种编译语言,没有 eval 函数等。您可能希望在程序中包含脚本引擎,例如 Lua

    【讨论】:

    • 是的,我看到在 Java 上他们有一个 Eval 函数,以为这里会是一样的。
    • 即使在 Java 中它们也不会(因为 Java 也是一种有点编译的语言)。然而,在 JavaScript 中它们确实如此。不要混淆 Java 和 JavaScript。
    猜你喜欢
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 2011-12-06
    • 2018-11-13
    • 1970-01-01
    相关资源
    最近更新 更多