gpt4 book ai didi

clang - Libclang 返回不正确的游标类型(stdlib 和命名空间类型)

转载 作者:行者123 更新时间:2023-12-05 08:09:56 40 4
gpt4 key购买 nike

我正在使用 libclang 来做一些 C++ 的基本反射(reflect)。我正在为标题创建一个翻译单元,然后使用游标访问所有树元素,在某些情况下,我会返回到 qualtypes 以获取必要的信息。现在的问题是 libclang 返回的游标类型不正确。对于下面的示例头文件:

#include <vector>
#include <string>

namespace SomeNamespace
{
struct B
{
std::string m_string;
std::vector<float> m_vector;
};
}

我使用带有以下输入的 clang_parseTranslationUnit2 解析它:

参数:“-x”、“C++”

选项:CXTranslationUnit_DetailedPreprocessingRecord | CXTranslationUnit_SkipFunctionBodies | CXTranslationUnit_Incomplete;

现在访问结构 B 的字段时,我得到:

CXType_Int 用于光标到 m_vector 而不是 CXtype_Unexposed

但对于 std::string 成员 m_string,我得到了 CXType_Unexposed,它允许我访问该字段并提取必要的信息。当访问字符串字段时,我正确地得到了“命名空间”,然后是“typeref”游标类型。

我完全不知道发生了什么,为什么 lib clang 无法理解 std::vector 类型?

我在 2015 年 6 月 1 日获得了最新的 libclang 版本。

最佳答案

我在这里找到了答案https://stackoverflow.com/a/66702426

基本上,libclang 中任何东西的默认类型显然都是 int。如果存在解析失败,您可能会看到类型显示为 int 而不是它们的正确类型。解析后检查诊断,如果有则失败,而不是继续打印错误的类型。

关于clang - Libclang 返回不正确的游标类型(stdlib 和命名空间类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30602811/

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