CXXRecords getNameAsString, как получить полное имя?

 namespace A {
     namespace B {
         class C {
             class D {
             };
         };
     }
 }

CXXRecords для D с getNameAsString вернет D.
Как я могу получить полное имя ::A::B::C::D ?

Я попытался рекурсивно вызвать getParent, но не смог получить пространства имен..


person KoKuToru    schedule 06.09.2014    source источник


Ответы (2)


После долгих поисков и попыток я нашел

QualType::getAsString(cl->getASTContext().getTypeDeclType(const_cast<CXXRecordDecl*>(cl)).split())

В качестве полезного решения будет выведено class A::B::C::D.
Для namespace using std; vector<int> g; будет выведено class std::vector<int>.

Было бы неплохо иметь только std::vector, но простые манипуляции со строками решат эту проблему.

person KoKuToru    schedule 07.09.2014

Предполагая, что ваша переменная-указатель RecordDecl называется recordDecl, вы можете просто использовать recordDecl->getQualifiedNameAsString()

person Justin    schedule 04.10.2019