clang - 如何将表达式的类型作为字符串获取?
问题描述
我这里有个小问题。我有一个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");
?
解决方案
getAsString
确实提供了您正在寻找的功能。
您的代码的问题是它Expr::getType
不会返回clang::QualType
not clang::QualType *
。它有一个重载的运算符*
并且->
返回clang::Type &
,这就是你得到这个编译器错误的原因。
长话短说:将其更改为lhs->getType().getAsString()
推荐阅读
- redux-saga - 在执行“fork”的函数上执行“调用”会导致返回挂起?
- c - 为什么指向两个连续数组条目的指针之间的差异总是 1,如果不强制转换为 char 指针?
- php - Laravel - 使用链接按升序和降序排列图像
- r - 从数据框生成时间序列列表
- javascript - 可以使用正则表达式来比较和匹配一组单词吗?
- c# - 在实体框架中的 asp.net 身份中创建角色时出现错误
- javascript - 如何将 index.html/index.jsp 上定义的 Javascript 变量用于 Vue.js?
- java - 如何将 JsonArray 从一个活动传递到另一个活动
- c# - Unity 中是否有在 'OnAfterDeserialize' 之前调用的类或函数?
- android - Android合并dex错误