私は純粋仮想関数上書きしようとしています。しかしC++のテンプレートクラスで純粋仮想関数をオーバーライドする方法は?
template <class P, class R> class Visitor {
public:
virtual ~Visitor() {}
virtual R visit(ASTNode& n, P p) = 0;
};
class ToStringVisitor : public Visitor<string, int> {
virtual string visit(ASTNode& n, int p) override {
return "";
}
}
を、私はエラーを取得する:
error: 'virtual std::__cxx11::string ToStringVisitor::visit(ASTNode&, int)' marked 'override', but does not override
virtual string visit(ASTNode& n, int p) override {
なぜこのオーバーライドではないでしょうか?
私が見つけることができる他の質問は、そのような簡潔な例、またはスーパークラスのテンプレート戻り値の詳細を持っていません。
'virtual int visit(ASTNode&n、string p)override'または' Visitor ' –