我正在尝试使用插件从Clang中提取AST,我想获取默认构造函数的“源代码”。例如,在我的源代码中,我有:
class T { public: T() = default; }
在Clang AST中,构造函数对象的getBody()
成员返回null
。是否有某种方式可以将默认实现设为Stmt
?在这种情况下,它将返回{}
,但在一般情况下,它将涉及调用父级构造函数等。
一个简单的示例,将以下内容写入文件:
class P { }
int main() {
// P x;
return 0;
}
此文件不会生成任何构造函数代码(您可以使用(clang++ -Xclang -ast-dump -fsyntax-only test-ctor.cpp
转储AST,但是如果取消注释P x
行,则同一命令将生成一个默认构造函数:>
| CXXConstructorDecl 0x562bdb879eb0 <line:5:5, col:17> col:5 used P 'void () noexcept' default trivial
| `-CompoundStmt 0x562bdb87a570 <col:17>
谢谢!
答案 0 :(得分:0)
基于this post和C ++ 11,
当默认使用构造函数(3.2)创建其类类型的对象(1.8)或在其首次声明后明确将其默认设置时,将隐式定义默认的默认构造函数,而不将其定义为删除。 >
因此,在代码中P x
时有一个CXXConstructorDecl节点,即,对象x
的类类型为P
。
答案 1 :(得分:0)
这可以通过Sema
对象使用诸如DefineImplicitDefaultConstructor
之类的功能来实现。 Sema
对象可从CompilerInstance
获得。