我在这里有一个小问题。我有一个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
或其他什么内容,如何将整数作为字符串std::string("int");
来获得?
答案 0 :(得分:1)
getAsString
确实提供了您正在寻找的功能。
您的代码存在的问题是Expr::getType
确实返回了clang::QualType
而不是clang::QualType *
。它有一个重载的运算符*
和->
,它们返回clang::Type &
,这就是为什么会出现此编译器错误的原因。
长话短说:将其更改为lhs->getType().getAsString()