如何使用clang :: TypeVisitor :: Visit下降类型结构

问题描述

我了解C ++中的Visitor模式,并且好奇地反复出现了模板模式(CRTP)。 但是我在尝试理解如何使用 clang :: TypeVisitor :: Visit 方法来递归地沿类型结构递归时遇到了麻烦。 例如,我有一个如下所示的C ++函数对象,我想获取模板参数(enumT)的类型,并最终获取其声明(声明该枚举的位置)

enum unscoped_enum {
     val_3,val_4
};
template <unscoped_enum enumT>
class funcObject{
 public:
 void operator()() const {}
};

我派生的访问者类如下:

class DerivedVisitor : public TypeVisitor<DerivedVisitor> {

void *Visit(QualType T) {
      if (T.isNull())
        return nullptr;
   return Visit(T.getTypePtr()) //not sure this is correct
  }
}

我的问题是:我如何确定要实现的Visit *方法以便我获得EnumDecl? 像VisitEnumType(const EnumType et)就是其中之一。 但是剩下的是什么? 另外,如果我从QualType开始访问,是否以正确的方式使用QualType.getTYpePtr调用访问?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)