у меня есть CXCursor
это отмечает место, где объявление функции в C ++. Я знаю, как получить имя метода или USR … но как я могу получить имя класса (частью которого является метод)
Код, который я анализирую с помощью libclang:
Number3D* ParseObjectFace::RetFaceVertex(){
// some code...
}
Когда я пытаюсь распечатать информацию о курсоре, я использую:
clang_getCString(clang_getCursorUSR(cr));
//output "c:@C@ParseObjectFace@F@RetFaceVertex#"clang_getCString(clang_getCursorDisplayName(cr));
//output "RetFaceVertex()"
Как я могу получить «ParseObjectFace» (имя класса)?
Ты можешь использовать 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"
Других решений пока нет …