3

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;

struct BI get のフィールドにアクセスすると、次のようになります。

CXtype_Unexposedの代わりに m_vector へのカーソルのCXType_Int

しかし、std::stringメンバー m_string については、フィールドにアクセスして必要な情報を抽出できるCXType_Unexposedを取得します。文字列のフィールドにアクセスすると、「名前空間」と「typeref」のカーソルタイプが正しく取得されます。

lib clang が std::vector 型を理解できないのはなぜですか?

2015 年 6 月 1 日に最新の libclang バージョンを取得しました。

4

1 に答える 1