在 C++ 中可以从字符串变量执行 C++ 代码。就像在 Javascript 中一样:
var theInstructions = "alert('Hello World'); var x = 100";
var F=new Function (theInstructions);
return(F());
我想要一些非常相似的东西,比如 C++ 中的 Javascript。怎么做 ?
在 C++ 中可以从字符串变量执行 C++ 代码。就像在 Javascript 中一样:
var theInstructions = "alert('Hello World'); var x = 100";
var F=new Function (theInstructions);
return(F());
我想要一些非常相似的东西,比如 C++ 中的 Javascript。怎么做 ?
不,C++ 是静态类型,编译为本机二进制语言。
尽管您可以使用 LLVM JIT 编译,但在不中断运行时的情况下进行编译和链接。应该是可行的,但它只是不在 C++ 领域。
如果你想要一个 C++ 下的脚本引擎,你可以使用例如 JS——它是迄今为止最快的动态解决方案。Lua、Python、Ruby 也可以,但通常速度较慢,考虑到您只是将它用于脚本编写,这可能不是一件可怕的事情。
例如,在 Qt 中,您可以执行以下操作:
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QScriptEngine engine;
QScriptValue value = engine.evaluate("var a = 20; var b = 30; a + b");
cout << value.toNumber();
return a.exec();
}
你会得到 50 ;)
您将需要调用编译器来编译代码。此外,您将需要生成一些代码来将字符串包装在函数声明中。最后,您将需要以某种方式加载已编译的代码。
如果我这样做(我不会这样做),我会:
system()
来构建共享库(.dll
在 windows 或.so
linux 上)在大多数情况下,这确实不是您想要编写 C 代码的方式。
直接说不行。但是你可以:
C++ 是一种编译语言。您将 C++ 源代码编译成机器代码,即可执行文件。即被加载并执行。编译器了解 C++(并且拥有所有可用的库头文件)。可执行文件没有,这就是为什么它不能将字符串转换为可执行代码的原因。如果字符串恰好包含机器代码指令,您确实可以执行它的内容,但这通常是一个非常糟糕的主意......
这并不意味着不可能进行这种运行时编译。在 C++ 中,很少(如果确实有的话)是不可能的。但是你要做的是实现一个 C++ 编译器对象......在决定你真的想要这个之前先看看其他编译器项目。
解释型语言可以轻松做到这一点——它们只需要将字符串传递给已经在运行程序的解释器。他们在其他方面为这种灵活性付出了代价。
您可以使用 Cling 作为 C++ 解释器。
我创建了小型 CMake 项目以便于 Cling 集成:C++ 作为编译时脚本语言 ( https://github.com/derofim/cling-cmake )
简短的回答是否定的。黑客将有一个实地日。但是,您可以使用 Windows IActiveScriptSite 界面来利用 Java/VB 脚本。Google IActiveScriptSite,网上有很多例子。或者你可以做我目前正在做的事情,滚动你自己的脚本引擎。