Существует ли хороший способ не повторять declaration всех методов интерфейса в сабклассах?
Сейчас у меня есть abstract class
struct Node {
Node *parent;
std::vector<Node *> children;
virtual void pretty_print(int indent) const = 0;
virtual void accept(Visitor& v) = 0;
virtual void typecheck(void) = 0;
virtual Value *codegen(void) = 0;
};
и разные сабклассы имплементирующие этот интерфейс
// abstract class as well
struct Expression : public Node {
map<string, Expression *> symtab;
static Expression *parse(std::list<Token>& tokens);
};
struct LitDouble : public Expression {
explicit LitDouble(double d) : val(d) {}
virtual void accept(Visitor& v) { v.visit(this); }
virtual void typecheck(void) {}
virtual void pretty_print(int indent) const;
virtual Value *codegen(void);
static LitDouble *parse(std::list<Token>& tokens);
private:
double val;
};
struct LetExpr : public Expression {
std::vector<Variable*> bindings;
Expression *body;
LetExpr(std::vector<Variable*> bs, Expression *b) : bindings(bs), body(b) {}
virtual void accept(Visitor& v) { v.visit(this); }
virtual void typecheck(void) {}
virtual Value *codegen(void) {return NULL;}
virtual void pretty_print(int indent) const;
static LetExpr *parse(std::list<Token>& tokens);
};
ну и так далее. Четыре виртуальных метода повторяются во всех subclass declarations. Если есть более красивый способ указать что «class LetExpr implements interface Node», я хотел бы его использовать.