Как получить тип выражения в виде строки? - PullRequest
0 голосов
/ 30 мая 2019

У меня здесь небольшая проблема.У меня есть clang::Expr объект.Я хочу получить тип этого выражения в виде строки.Согласно документации, clang::Expr возвращает QualType.clang::QualType имеет метод с именем getAsString(), который возвращает строку, описывающую этот тип.

// Get the expressions to the left and right of the binary operator.
const Expr *lhs = binop->getLHS()->IgnoreParenCasts();
string typeLhs = lhs->getType()->getAsString();

Когда я набираю make, он сообщает об ошибке:

remove_memcpy.cpp:110:46: error: no member named 'getAsString' in 'clang::Type'
            string typeLhs = lhs->getType()->getAsString();
                             ~~~~~~~~~~~~~~  ^

Видимо Expr::getType()возвращает clang::Type, а не clang::QualType, как ожидалось.

Странно, в документации это дни, когда Expr::getType() возвращает clang::QualType.Возможно, это потому, что последняя версия документации - Clang 9.0.0, но я использую Clang 6.0.1.Может быть, они изменили его.

Если у меня есть clang::Expr, базовый тип которого int или что-то еще, как я могу получить int в виде строки, std::string("int");?

1 Ответ

1 голос
/ 02 июня 2019

getAsString обеспечивает функциональность, которую вы ищете.

Проблема с вашим кодом в том, что Expr::getType возвращает clang::QualType, а не clang::QualType *. У него есть перегруженные операторы * и ->, которые возвращают clang::Type &, и поэтому вы получаете эту ошибку компилятора.

Короче говоря : измените его на lhs->getType().getAsString()

...