Clang AST:获取构造函数的CXXCtorInitializer列表,它们的声明也不是定义

时间:2016-05-24 09:03:57

标签: c++ clang abstract-syntax-tree matcher

我对以下问题感到不满。来自CXXConstructorDecl的inits在以下场景中返回一个空列表:

Alvin-The-Robot:MyProject Alvin$ git tag
0.1.0

现在,如果我更改了Test3构造函数的定义,并将其内联为:

class Test3 {
  int a = 2;
  int b;
  Test3();
};

Test3::Test3() : b(0) {
}

一切正常,函数inits返回a和b的2个项目的列表。

1 个答案:

答案 0 :(得分:0)

正确的方法是执行以下操作:

    if (!ctor->isThisDeclarationADefinition()) {
  for (auto ctorFromList : ctor->redecls()) {
    CXXConstructorDecl *ctr = dyn_cast_or_null<CXXConstructorDecl>(
        ctorFromList);

    if (ctr != ctor) {
      ctor = ctr;
      break;
    }
  }

现在ctor是一个指向定义的指针,该定义也包含inits列表。