3

最近、私は研究プロジェクトのために抽象クエリツリーを実装する必要がありました。基本オブジェクトはですASTNodeが、実際のツリーノードは派生クラスでした:式ノード、比較ノード、オペランドノードなど。各タイプのノードには、オペランドノード、引数のリストなどの独自のメンバーがあります。 。

このツリーを再帰的に生成する解析関数ASTNodeは、生成されたツリーのルートにあるノードのタイプに関係なく、ポインターを返すだけなので、タイプを返す必要があります。

つまり、ツリーを解析する関数は、ツリーを操作する前に、ツリー内のノードごとに、そのタイプを照会する必要があります。これは動的キャストまたはtypeidを使用して実行できますが、SOおよびGoogleスタイルガイドラインは、リスコフの置換原則および一般的なすべての実行タイプタイプチェックの違反に腹を立てます。

ツリーはアプリケーションのさまざまな部分でさまざまな方法で使用できるため、ノードを操作する関数をノードサブクラス自体に配置することはできません。私の木を構造化するためのより良い方法はありますか?

4

2 に答える 2

2

これは、訪問者パターンに適しているように見えます。

Python で抽象構文ツリーのビジター パターンを作成するには?

http://en.wikipedia.org/wiki/Visitor_pattern

于 2012-05-07T15:02:40.863 に答える
1

複合パターンも役に立つかもしれません。こちらの記事もご覧ください:

http://blog.jooq.org/2012/04/10/the-visitor-pattern-re-visited/

于 2012-05-07T15:50:36.307 に答える