不完全型は標準コンテナを強化できますか?
再帰的なデータ構造を追求する際、開発者は多くの場合、不完全型を使用して標準コンテナをインスタンス化します。ただし、不完全なテンプレート引数の使用に関する標準のガイダンスが限られているため、そのような構造の合法性については議論されています。
この懸念は、§17.6.4.8 [lib.res.on.functions] の一節に由来しています。標準では、そのコンポーネントに対して明示的に許可されていない限り、テンプレート コンポーネントをインスタンス化するときにテンプレート引数として不完全な型を使用することを禁止しています。これにより、次のような構成要素の有効性について疑問が生じます。
<code class="cpp">struct multi_tree_node { std::vector< multi_tree_node & > child; };</code>
このような構成要素は実際にはシームレスに機能することがよくありますが、不完全な型のインスタンス化について規格が沈黙しているため、その合法性に疑問が投げかけられています。
ただし、さらに精査すると、不完全型に対する規格の制限は主に「型に対する演算...」に適用され、§17.6.4.8 の文脈では関数を指します。コンテナのインスタンス化には、そのメンバー定義内の関数の実行が含まれないため、インスタンス化自体は標準の禁止事項に違反することはありません。
この解釈は、不完全な型引数を明示的に許可する std::unique_ptr の存在によってサポートされています。ブロックスコープ内であっても。さらに、不完全型のインスタンス化を禁止する規格の理論的根拠は、「小さなベクトル」などの最適化手法の効率的な実装に関するものであり、コンテナのインスタンス化には適用されません。
そのため、規格では不完全型の使用を非推奨としています。テンプレート コンポーネントをインスタンス化するときに引数を使用する場合、不完全な型を使用して標準コンテナをインスタンス化することの合法性は依然として曖昧です。ただし、規格によってさらに明確な説明が提供されるまでは、そのような構成には注意することをお勧めします。
以上が不完全型は標準コンテナのインスタンス化の正当な引数ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。