虚拟访客

时间:2013-09-04 13:35:42

标签: c++ visitor

我有一个类的层次结构(Base和daugthers ABC等等。层次结构树不是有限的。可以使用众所周知的访客模式 访问 Base*,以便动态调整Base*的动态类型。访问者的类型为BaseVisitor。像这样:

struct BaseVisitor;

struct Base {
  virtual void accept(BaseVisitor &v) = 0;
};

struct A : Base {
  int a;

  A(int x) : a(x) {}
  ~A(void) = default;

  void accept(BaseVisitor &v) override {
    v->visit(*this);
  }
};

struct B : Base {
  float b;

  B(void) : b(314.f) {}
  ~B(void) = default;

  void accept(BaseVisitor &v) override {
    v->visit(*this);
  }
};

struct BaseVisitor {
  void visit(Base &) {}

  void visit(A &a) {
    std::cout << "just visited a A; a=" << a.a << std::endl;
  }

  void visit(B &b) {
    std::cout << "just visited a B; b=" << b.b << std::endl;
  }
};

现在,我想让BaseVisitor成为一个抽象类,以便继承新的访问者。当我想定义抽象类时会出现问题:

struct ABaseVisitor {
  virtual void visit(Base &) = 0; /* huh? */
};

你有什么想法吗?

0 个答案:

没有答案