2014-01-28 4 views
2

나는 C++에서 함수 선언이있는 곳을 표시하는 CXCursor을 가지고있다. 나는 메소드 이름, 또는 USR을 얻는 방법을 알아 ...하지만 어떻게 내가클래스를 가져 오는 방법 : clang이있는 함수

내가 libclang 구문 분석하고 코드는 (메소드가 그 일부가) 클래스 이름을 얻을 수 있습니다 :

Number3D* ParseObjectFace::RetFaceVertex(){ 
    // some code... 
} 

내가 사용하는 커서 정보 인쇄하려고 할 때 :

clang_getCString(clang_getCursorUSR(cr)); 
//output "c:@[email protected]@[email protected]#" 
clang_getCString(clang_getCursorDisplayName(cr)); 
//output "RetFaceVertex()" 

가 어떻게 "ParseObjectFace"(클래스 이름)을 얻을 수 있습니까?

답변

3

clang_getCursorSemanticParent을 사용하여 커서의 "의미 상위"를 검색 할 수 있습니다. 문서에서 인용 된 바와 같이 :

커서의 의미 상 부모는 의미 적으로 주어진 커서를 포함하는 커서입니다. [...] C::f의 라인 외부 정의에서 의미가있는 부모는이 함수가 구성원 인 클래스 C입니다. 당신의 예에서

, 다음과 같이 작동합니다 :

// Retrieve the semantic parent (the class in this case) 
CXCursor parent = clang_getCursorSemanticParent (cr); 

clang_getCString (clang_getCursorDisplayName (parent)); 
// Should yield "ParseObjectFace" 
관련 문제