让我们假设我正在为某些编程语言编写编译器。通常使用抽象语法树(AST)作为内部表示。我可以看到两种可能的设计方法:
boost::variant
由于节点的层次结构是固定的,boost::variant
就足够了。
我的问题是从维护性和运行时效率的角度来看每种方法的优点和缺点是什么?
答案 0 :(得分:4)
使用boost::variants
将起作用,但需要您广泛使用访问者模式来利用变体对象的内容。如果您稍后延长变体中使用的类型数量,则必须维护您已实施的所有访问者。
使用继承,您可以使用多态。稍后的扩展将很简单:只需派生一个现有的基础并覆盖多态函数,而不触及其余的代码。