API Cling доступен?
Как использовать Cling в моем приложении через API для интерпретации кода C++?
Я ожидаю, что это обеспечит терминальный способ взаимодействия без необходимости компилировать / запускать исполняемый файл. Допустим, у меня есть программа Hello World:
void main() {
cout << "Hello world!" << endl;
}
Я ожидаю иметь API для выполнения char* = (program code)
и получить char *output = "Hello world!"
, Благодарю.
PS. Нечто похожее на пример 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=%d\n", a[1]);
printf("retval = %d\n", retval);
Ch_End(interp);
}
}
2 ответа
Наконец, есть лучший ответ: пример кода! См. https://github.com/root-project/cling/blob/master/tools/demo/cling-demo.cpp
И ответ на ваш вопрос: нет. cling принимает код и возвращает значения или объекты C++ в скомпилированном и интерпретированном коде. Это не что-то вроде "строка в / строка". Для этого есть Perl;-) Вот как выглядит код со значением:
// 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
Конечно, вы можете создать свой собственный "вложенный" интерпретатор и во время выполнения cling. (См. Ссылку Doxygen выше)
Я надеюсь, что это поможет и ответит на вопрос, больше примеров использования вы можете найти в папке test /. Васил