最近,我不得不为一个研究项目实现一个抽象查询树。基础对象是ASTNode
,但实际的树节点是派生类:表达式节点,比较节点,操作数节点等。每种类型的节点都有自己的成员,例如操作数节点,列表论据,等等。
递归生成此树的解析函数需要返回ASTNode
类型,因为它们只返回一个指针,无论节点的哪个类型位于生成的树的根处。
这意味着在对树进行操作之前,解析树的函数需要为树中的每个节点查询它是什么类型。这可以通过动态强制转换或typeid来完成,但是SO和Google风格指南会对我违反Liskov substitution principle以及所有运行类型类型检查感到愤怒。
我无法在节点子类本身中放置节点上运行的函数,因为树可以在应用程序的不同部分以多种不同的方式使用。有没有更好的方法来构建我的树木?
答案 0 :(得分:2)
答案 1 :(得分:1)