次のような階層があります。
class Element{ public : virtual void Accept(Visitor&) = 0
protected : Element(); int num;
};
class ElementA : public Element{
public : ElementA();
void Accept(Visitor& v) {v.Visit(this};}
};
class ElementB : public Element{
public : ElementB();
void Accept(Visitor& v) {v.Visit(this};}
class Visitor{
public: void Visit(ElementA*);
void Visit(ElementB*);
};
編集: num の値を提供する階層にメソッド int getNum() を追加する必要があります。ただし、これには階層全体を再度コンパイルする必要があり、それは許可されていません。したがって、階層の再コンパイルが不要になるように、階層の設計を変更する必要があります。