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

How to get the type of an expression as a string?

我遇到了一个小问题。我有一个 clang::Expr 对象。我想将该表达式的类型作为字符串获取。根据文档,clang::Expr returns a QualTypeclang::QualType 有一个名为 getAsString() 的方法,其中 returns 一个描述该类型的字符串。

// 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() returns clang::Type,而不是预期的 clang::QualType

奇怪的是,在文档中 Expr::getType() returns clang::QualType。可能是因为文档的最新版本是Clang 9.0.0,而我使用的是Clang 6.0.1。也许他们改变了。

如果我有一个 clang::Expr,其基础类型是 int 或其他类型,我怎样才能将 int 作为字符串 std::string("int");?

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

您的代码的问题是 Expr::getType return clang::QualType 而不是 clang::QualType *。它有一个重载运算符 *-> 即 return clang::Type & 这就是你得到这个编译器错误的原因。

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