【发布时间】:2021-10-06 05:46:24
【问题描述】:
我正在尝试实现访问者设计模式来为解释器构建表达式树。我在头文件中声明所有内容并遇到一个问题,我需要在其他所有内容之前定义访问者,但这是不可能的,因为我的 Expr 类需要在它之前定义访问者,但是 那 不可能,因为其他类需要Expr 在他们之前定义,我只是不确定该怎么做。
#include "Token.h"
template <typename R>
class Visitor {
virtual R visitBinaryExpr(Binary expr);
};
class Expr {
public:
template<typename R>
R accept(Visitor<R> visitor);
};
class Binary : public Expr {
public:
Binary(Expr left, Token oper, Expr right) : left(left), oper(oper), right(right) {
}
template<typename T>
T accept(T visitor) {
return visitor.visitBinaryExpr(this);
}
const Expr left;
const Token oper;
const Expr right;
};
给出语法错误:第 5 行的标识符“二进制”
这是代码的一个小例子。任何帮助将不胜感激!
【问题讨论】:
-
您需要前向声明,请查看stackoverflow.com/questions/4757565/…
-
template<typename T> T accept(T visitor)可疑,返回值不匹配,引用访问者避免切片。
标签: c++ circular-dependency circular-reference visitor-pattern