Вывести тип параметра (ParmVarDecl) с помощью clang API - PullRequest
11 голосов
/ 13 июля 2011

Мне нужно напечатать тип параметра в исходном файле C ++, используя API Clang.

Если у меня есть представление параметра в clang (ParmVarDecl* param), я могу напечатать имя параметра, используя param->getNameAsString().Мне нужен метод param->getTypeAsString(), но такого метода нет.Так есть ли другой способ выполнить эту задачу?

Ответы [ 2 ]

24 голосов
/ 13 июля 2011

Получил ответ на мой вопрос в irv llvm:

Есть метод std::string clang::QualType::getAsString(SplitQualType split)

Так что это работает для меня:

ParmVarDecl* param = *someParameter;
cout << QualType::getAsString(param->getType().split()) << endl;
0 голосов
/ 13 июля 2011

Вы можете использовать typeid, чтобы получить имя любого типа. Хотя это будет варьироваться от компилятора к компилятору и не может быть красивым именем.

#include <iostream>
#include <typeinfo>

struct MyStruct { };

int main()
{
    std::cout << typeid(MyStruct).name() << std::endl;
}

Если вам нужно сделать это для большого количества классов, вы можете сделать вызов частью базового класса, тогда любой класс, которому нужна функциональность, может просто наследовать его.

#include <iostream>
#include <typeinfo>

class NamedClass
{
  public:
    virtual ~NamedClass() { }

    std::string getNameAsString()
    {
        return typeid(*this).name();
    }
};

class MyStruct : public NamedClass
{
};

int main()
{
    MyStruct ms;
    std::cout << ms.getNameAsString() << std::endl;
}
...