如何将表达式的类型获取为字符串?

时间:2019-05-30 15:56:25

标签: clang llvm-clang

我在这里有一个小问题。我有一个clang::Expr对象。我想以字符串形式获取该表达式的类型。根据文档,clang::Expr返回一个QualTypeclang::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或其他什么内容,如何将整数作为字符串std::string("int");来获得?

1 个答案:

答案 0 :(得分:1)

getAsString确实提供了您正在寻找的功能。

您的代码存在的问题是Expr::getType确实返回了clang::QualType而不是clang::QualType *。它有一个重载的运算符*->,它们返回clang::Type &,这就是为什么会出现此编译器错误的原因。

长话短说:将其更改为lhs->getType().getAsString()