2014-06-06 3 views
0

내 응용 프로그램에서 Cling을 API를 통해 사용하여 C++ 코드를 해석하는 방법?Cling API를 사용할 수 있습니까?

실행 파일을 컴파일/실행하지 않고도 터미널과 같은 방식으로 상호 작용할 수 있기를 기대합니다. 의 내가 안녕하세요 세계 프로그램이 있다고 가정 해 봅시다 :

void main() { 
    cout << "Hello world!" << endl; 
} 

내가 char* = (program code)를 실행하고 char *output = "Hello world!"을 얻을 수있는 API를 기대합니다. 감사.

추신. 비슷한 뭔가 interpeter example를를 ch : 하나를 수행

/* 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); 
} 
} 

답변

0

보통 방법이다 : 당신이 당신의 자신의 '중첩'인터프리터를 만들 수 있습니다 물론 http://cling.web.cern.ch/cling/doxygen/classcling_1_1Interpreter.html

: API가 설명되어 [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

집착의 런타임도. (위의 doxygen 링크를 참조하십시오.)

나는 그것이 도움이 되었기를 바랍니다. 질문에 대답하고 싶습니다. 테스트/폴더 아래에서 더 많은 사용 예제를 찾을 수 있습니다. 바실

0

마지막으로 더 좋은 대답이 있습니다. 예제 코드! 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'; 

늦은 답장에 사과드립니다!

+0

감사합니다. @GhostCat, 완료! –

+0

니스. 나는 upvote ...을 좋아할 것이다. 그러나 정직하게 : 나는 오늘 투표에 대해 투표를하지 않았다. 내일 내게 댓글을 남겨주세요. ;-) – GhostCat