2012-05-07 41 views
3

最近,我不得不爲一個研究項目實現抽象查詢樹。基礎對象是ASTNode,但實際的樹節點是派生類:表達式節點,比較節點,操作數節點等。每種類型的節點都有其自己的成員,例如操作數節點,參數列表等等。向前。關於Liskov原理,我應該如何實現樹節點類?

遞歸生成此樹的解析函數需要返回ASTNode類型,因爲它們只是返回一個指針,而不管在生成的樹的根位置處是什麼類型的節點。

這意味着在操作樹之前,解析樹的函數需要查詢樹中每個節點的類型。這可以通過動態轉換或typeid來完成,但SO和Google風格指南會因我違反Liskov substitution principle以及所有運行類型檢查而感到憤怒。

由於可以在應用程序的不同部分以多種不同方式使用樹,因此我無法將在節點子類自身上運行的功能放在節點上。有沒有更好的方法來構建我的樹木?

回答