C++ 我应该如何根据Liskov原理实现树节点类?

C++ 我应该如何根据Liskov原理实现树节点类?,c++,oop,C++,Oop,最近,我不得不为一个研究项目实现一个抽象查询树。基本对象是ASTNode,但实际的树节点是派生类:表达式节点、比较节点、操作数节点等。每种类型的节点都有自己的成员,如操作数节点、参数列表等 递归生成此树的解析函数需要返回ASTNode类型,因为它们只返回一个指针,而不管生成树的根节点是什么类型的 这意味着解析树的函数在对树进行操作之前,需要查询树中每个节点的类型。这可以通过动态强制转换或typeid来实现,但是SO和Google风格的指导原则会因为我违反了和所有运行类型检查而生气 我不能将操作节

最近,我不得不为一个研究项目实现一个抽象查询树。基本对象是
ASTNode
,但实际的树节点是派生类:表达式节点、比较节点、操作数节点等。每种类型的节点都有自己的成员,如操作数节点、参数列表等

递归生成此树的解析函数需要返回
ASTNode
类型,因为它们只返回一个指针,而不管生成树的根节点是什么类型的

这意味着解析树的函数在对树进行操作之前,需要查询树中每个节点的类型。这可以通过动态强制转换或typeid来实现,但是SO和Google风格的指导原则会因为我违反了和所有运行类型检查而生气


我不能将操作节点的函数放在节点子类中,因为树可以在应用程序的不同部分以几种不同的方式使用。有没有更好的方法来构建我的树?

这看起来很适合访问者模式

也许也会有用。 还可以看看这篇文章: