Я пытаюсь извлечь AST из Clang, используя плагин, и я хотел бы получить «исходный код» для конструкторов по умолчанию.Например, в моем исходном коде у меня есть:
class T { public: T() = default; }
В Clang AST элемент getBody()
объекта конструктора возвращает null
.Есть ли способ получить реализацию по умолчанию как Stmt
?В этом случае он вернет {}
, но в общем случае это будет связано с вызовом родительских конструкторов и т. Д.
Простой пример: напишите следующее в файл:
class P { }
int main() {
// P x;
return 0;
}
Этот файлне будет генерировать никакого кода конструктора (вы можете сбросить AST с помощью (clang++ -Xclang -ast-dump -fsyntax-only test-ctor.cpp
), но если вы раскомментируете строку P x
, то та же команда сгенерирует конструктор по умолчанию:
| CXXConstructorDecl 0x562bdb879eb0 <line:5:5, col:17> col:5 used P 'void () noexcept' default trivial
| `-CompoundStmt 0x562bdb87a570 <col:17>
Спасибо!