C++:更好的访问者模式

引言 C++ 作为一门没有直接在语言层面支持 tagged union 的 OOP 语言,在进行诸如操作 AST 一类的处理时常常会采用访问者模式。我大一时写的一个弱智解释器中也是如此。很可惜当时在编程水平和 deadline 的双重限制下没能好好研究,时隔近一年,我对访问者模式也有了更多的理解,打算讲讲这个设计模式的问题和 C++ 中的对应解决办法。 起步 相信所有人初学访问者模式的时候见到的都是类似下面这样的代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 struct FooAcc; struct BarAcc; struct Visitor { void visit(FooAcc&); void visit(BarAcc&); }; struct AccBase { virtual void accept(Visitor& visitor) = 0; }; struct FooAcc: AccBase { void accept(Visitor& visitor) override { visitor....

2021-03-10 · QuarticCat