Javaだと、以下のようにジェネリックスを使ったvisitorパターンで四則演算のプログラムを書く事が出来ますが、C++に移植しようとしたらtemplateでvirtualなメソッドが作れなくて、ウマく出来ませんでした。C++でどう書いたら良いか教えてください。
`
abstract class E {
abstract public <T> T accept(Visitor<T> v);
}
class EInt extends E {
public int i;
public EInt(int i) {
this.i = i;
}
public <T> T accept(Visitor<T> v) {
return v.visit(this);
}
}
class EAdd extends E {
E a;
E b;
public EAdd(E a, E b) {
this.a = a;
this.b = b;
}
public <T> T accept(Visitor<T> v) {
return v.visit(this);
}
}
interface Visitor<T> {
public <T> T visit(EInt e);
public <T> T visit(EAdd e);
}
class EvalVisitor implements Visitor<Integer> {
public Integer visit(EInt e) {
return e.i;
}
public Integer visit(EAdd e) {
return e.a.accept(this) + e.b.accept(this);
}
}
class main {
public static void main(String[] argv) {
System.out.println("ans="+new EAdd(new EInt(1),new EInt(2)).accept(new EvalVisitor()));
}
}
`
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。