我在使用C++中的解釋器訪問者模式時遇到問題。下面的代碼產生(+),而不是((1 + 2)3),爲期望的:在C++中使用訪問者模式解釋器
class ExpVisitor{
public:
virtual void visit(class Add*)=0;
virtual void visit(class Int*)=0;
};
class Exp{
public:
virtual void accept(ExpVisitor *v){};
};
class Add : public Exp{
public:
Exp e1,e2;
Add(Exp in1,Exp in2){
e1=in1;
e2=in2;
}
void accept(ExpVisitor *v){
v->visit(this);
}
};
class Int : public Exp{
public:
int val;
Int(int v){
val=v;
}
void accept(ExpVisitor *v){
v->visit(this);
}
};
class PrintExp : public ExpVisitor{
public:
void visit(Add *e){
cout << '(';
(e->e1).accept(this);
cout << '+';
(e->e2).accept(this);
cout << ')';
}
void visit(Int *e){
cout << e->val;
}
};
int main(){
Add e=Add(Add(Int(1),Int(2)),Int(3));
PrintExp p;
e.accept(&p);
cout << endl;
}
的問題,當然,是精通::接受的是被調用的,而不是比從添加或詮釋。然而,我不能接受純粹的虛擬,因爲添加具有Exp類型的兩個成員e1和e2。我該如何解決這個例子?
嗯,http://en.wikipedia.org/wiki/Interpreter_pattern似乎在這裏相關。 – 2010-01-15 22:01:23