いくつかのコンテキスト
私はlibclangに精通していません。libclang への python バインディングを使用する vim プラグインを変更しています。
カーソルパラメータを受け取るpython関数があります。これは、現在の C++ バッファーの AST 内のほぼすべてのノードに対して呼び出されます。
問題
cursor.kind
カーソルの種類を取得するために使用されます。それ以外はすべて問題ありません
- テンプレート化された無料の関数宣言、
- テンプレート化されたコンストラクタ宣言と
- テンプレート化されたメソッド宣言
すべて同じ種類: FUNCTION_TEMPLATE
. それらを区別する必要があります。
さらなる洞察
たとえば、上記のテンプレート化されていないバージョンには次の種類があります。
FUNCTION_DECL
CXX_METHOD
とCONSTRUCTOR
.
cindex.pyのソースを検索しましたが、CXX_METHOD_TEMPLATE
またはCONSTRUCTOR_TEMPLATE
類似のものはありません。
私は何とかして必要な情報を取得しようとしましたが、成功しませんでしcursor.get_definition()
たcursor.underlying_typedef_type.get_declaration()
。
私が得た唯一の部分的な成功は、メソッドとコンストラクターのセマンティックおよびレキシカルな親がSTRUCT_DECL
.
テンプレート化されているかどうかはあまり気にしません。それがコンストラクター、メンバー、またはフリー関数であるかどうかは気にしません。
要約すると
カーソルが与えられた場合、それがメソッド (テンプレートであっても)、コンストラクター (テンプレートであっても)、または自由な関数宣言であるかどうかをどのように判断できますか?