我试图确定某个类型是在文件中定义还是包含在另一个文件中(系统标题或其他文件),我似乎无法找到一种简单的方法来查找该位置一种变量的类型。我能得到的最接近的是使用TypeLoc的方法,但那些只提供变量声明的位置(非常奇怪)。 ASTContext和SourceManager类似乎也没有提供太多帮助。关于如何做到这一点的任何想法(我确定 是一种方式)?
答案 0 :(得分:1)
这可以通过类型转换或使用getAs()
方法将Type
类强制转换为引用类型声明的内容来实现。
例如,
// Get Type of variable declaration
const clang::Type* type = var_decl->getTypeSourceInfo()->getTypeLoc().getTypePtr();
// Cast it as its appropriate subtype and then obtain its declaration
// For example, if the type was a record, you can cast it as a
// RecordType and then obtain its definition.
const clang::RecordType* record_type = type->getAs<clang::RecordType>();
if (record_type != nullptr) {
const clang::RecordDecl* type_decl = record_type->getDecl();
clang::SourceLocation end_of_type_decl = type_decl->getLocEnd();
}
希望这有帮助!