如何将表达式的类型获取为字符串?
How to get the type of an expression as a string?
我遇到了一个小问题。我有一个 clang::Expr
对象。我想将该表达式的类型作为字符串获取。根据文档,clang::Expr
returns a QualType
。 clang::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()
我遇到了一个小问题。我有一个 clang::Expr
对象。我想将该表达式的类型作为字符串获取。根据文档,clang::Expr
returns a QualType
。 clang::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()