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



我正在使用libclang做一些c++的基本反射。我正在为标题创建一个翻译单元,然后使用游标访问所有树元素,在某些情况下,我回到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代替CXtype_Unexposed

但是对于std::string成员m_string,我得到CXType_Unexposed,它允许我访问字段并提取必要的信息。当访问字符串的字段时,我正确地获得了"namespace"one_answers" typeef "游标类型。

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

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

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

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

try add clang headers dir in compile flags

相关内容

  • 没有找到相关文章

最新更新