如何在我的应用程序中使用通过API来解释c++代码?
我希望它提供类似终端的交互方式,而不需要编译/运行可执行文件。假设我有一个hello world程序:
void main() {
cout << "Hello world!" << endl;
}
我希望有API来执行char* = (program code)
并获得char *output = "Hello world!"
。谢谢。
p。类似于ch interpeter的例子:
/* File: embedch.c */
#include <stdio.h>
#include <embedch.h>
char *code = "
int func(double x, int *a) {
printf("x = %f\n", x);
printf("a[1] in func=%d\n", a[1]);
a[1] = 20;
return 30;
}";
int main () {
ChInterp_t interp;
double x = 10;
int a[] = {1, 2, 3, 4, 5}, retval;
Ch_Initialize(&interp, NULL);
Ch_AppendRunScript(interp,code);
Ch_CallFuncByName(interp, "func", &retval, x, a);
printf("a[1] in main=%dn", a[1]);
printf("retval = %dn", retval);
Ch_End(interp);
}
}
最后有一个更好的答案:示例代码!见https://github.com/root-project/cling/blob/master/tools/demo/cling-demo.cpp
你的问题的答案是:不。无论编译代码还是解释代码,都接受代码并返回c++值或对象。这不是"字符串输入/字符串输出"之类的事情。有perl来做这个;-)这就是代码in, value out的样子:
// We could use a header, too...
interp.declare("int aGlobal;n");
cling::Value res; // Will hold the result of the expression evaluation.
interp.process("aGlobal;", &res);
std::cout << "aGlobal is " << res.getAs<long long>() << 'n';
很抱歉回复晚了!
通常的做法是:
[cling$] #include "cling/Interpreter/Interpreter.h"
[cling$] const char* someCode = "int i = 123;"
[cling$] gCling->declare(someCode);
[cling$] i // You will have i declared:
(int) 123
API文档在:http://cling.web.cern.ch/cling/doxygen/classcling_1_1Interpreter.html
当然,你也可以在运行时中创建自己的"嵌套"解释器。(见上面的氧链接)
我希望它能帮助并回答问题,更多的使用示例你可以在test/文件夹下找到。Vassil