如何使用 clang 工具的 python 绑定来判断 class/struct 是可复制的

How to tell that class/struct is copyable using python bindings for clang tooling

我们的项目正在使用 clang python api 为 C++ 类 生成 python 绑定。 现在我们有一个限制,即只有在类型具有明确定义的复制构造函数时才会公开副本。

我想将其更改为还为生成的复制构造函数声明一个副本 - 所以我需要以某种方式检测它。

我关心的所有结构都是平凡可复制的,所以如果我只能检测平凡可复制的结构也很好。

我怎么知道我所在的结构是可复制的还是可简单复制的? 我以 CursorKind.STRUCT_DECL 作为起点。

这就是我们最终的结果。

a) 好像直接从 clang ast 你只能问是否 'is_pod' cindex.py

不完全是我需要的,因为 pod 也暗示没有默认构造函数符合此 std::is_pod std::is_trivial

b) 我们所做的是:

  1. 将原始文件包含在我们生成的不同 tmp 文件中,并 解析那个。
  2. 在该文件中生成一个特别命名的 enum <ClassName>_Traitsstd::is_copy_constructible 用于 class 感兴趣。