首页 > 解决方案 > 如何将表达式的类型作为字符串获取?

问题描述

我这里有个小问题。我有一个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()返回 a clang::Type,而不是clang::QualType预期的 a 。

很奇怪,在文档中它Expr::getType()返回一个clang::QualType. 也许是因为文档的最新版本是 Clang 9.0.0,但我使用的是 Clang 6.0.1。也许他们改变了它。

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

标签: clangllvm-clang

解决方案


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

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

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


推荐阅读