gpt4 book ai didi

c++ - 如何使用 Clang AST 找到 VarDecl 类型定义的 SourceLocation?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:09:01 26 4
gpt4 key购买 nike

我试图确定一个类型是在文件中定义还是包含在另一个文件中(无论是系统头文件还是其他文件),但我似乎无法找到一种简单的方法来找到类型的位置一个变量。我能得到的最接近的方法是使用 TypeLoc 的方法,但这些方法仅提供变量声明的位置(很奇怪)。 ASTContext 和 SourceManager 类似乎也没有提供太多帮助。关于如何做到这一点的任何想法(我确定必须是一种方式)?

最佳答案

这可以通过类型转换或使用 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();
}

希望这对您有所帮助!

关于c++ - 如何使用 Clang AST 找到 VarDecl 类型定义的 SourceLocation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44813207/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com