私はEASTL's list classを経由して、作者がどのようにノードを実装しているか調べました。私の期待は単純なクラス/構造でした。代わりに、私はベースとこのベースから継承しているノードを参照します(それでも単純ですが、なぜ2つのクラスですか?)。私たちは、それが 私たちは、このようなインサートとして非テンプレートの操作を持つことができますので、(下)を外し、ListNode(下記)とは別にListNodeBaseを定義し、それ が、それはようになりますテンプレートタイプはC++のスペースを無駄にしますか?
:なぜ彼のコメントは、説明しますリストアンカーノードはそれと共にTを運びません。 は、ユーザが明示的に作成しなかった余分なTsの存在のためにユーザを驚かせることになります。これの欠点は、 は、ノードポインタがListNodeではなく のListNodeBaseであるため、リストのデバッグ表示をより困難にすることです。ただし、下記のListNodeBaseProxyを参照してください。
私はここでいくつかのことを理解していません。私はを実行しますはなぜデバッグ表示を少し難しくするのかを理解していますが、list anchor node doesn't carry a T with it
とwould waste space and possibly lead to surprising the user due to extra Ts existing that the user didn't explicitly create
の意味は何ですか?
データのないリストは使用しません。 **アンカーノード**または** sentinel **と呼ばれる単一のノードがリストの各インスタンスに存在し、空のリストにも関連する特別なケースのコードを排除するために、空のリストにも存在します。このノードは、ユーザーのデータを格納する必要はありません。 –
@ n.m。それはクラス 'list'になるでしょう、あなたはOPが投稿したリンクで実装を見てみることができます。 'list'自体がセンチネルであるので、その点は疑問です。 – littleadv
私は見ました。私が知る限り、 'list' *は' base_node_type mNode; '行にセンチネルを含みます。 –