一些上下文
我对 libclang 不是很熟悉。我只是在修改一个使用python 绑定到 libclang的 vim 插件。
有一个接收游标参数的python函数。对于当前 C++ 缓冲区的 AST 中的几乎每个节点都会调用此方法。
问题
cursor.kind
用于获取光标的种类。一切都好,除了
- 模板化的自由函数声明,
- 模板化的构造函数声明和
- 模板化方法声明
都有相同的种类:FUNCTION_TEMPLATE
。我需要区分它们。
更多见解
例如,上述的非模板版本有以下几种:
FUNCTION_DECL
CXX_METHOD
和CONSTRUCTOR
.
我搜索了cindex.py的来源,没有CXX_METHOD_TEMPLATE
或CONSTRUCTOR_TEMPLATE
类似的。
我曾尝试以某种方式获取我需要的信息,例如使用cursor.get_definition()
and ,但没有成功cursor.underlying_typedef_type.get_declaration()
。
我获得的唯一部分成功是,对于方法和构造函数,语义和词法父级是STRUCT_DECL
.
我真的不在乎它是否是模板化的。我只关心它是构造函数、成员还是自由函数。
把它们加起来
给定一个游标,我如何判断它是方法(甚至是模板化的)、构造函数(甚至是模板化的)还是自由函数声明?