C コンテナでは、不完全な型によるインスタンス化が禁止されているのは有名です。 Boost のコンテナ ライブラリはこの制限を回避しており、その目的と潜在的な欠点について疑問を引き起こしています。
制限の根拠
歴史的に、C 標準化委員会は、不完全な実装のさまざまな動作を発見しました。異なる STL 実装間で型を共有します。互換性を確保し、混乱を避けるために、標準ライブラリ コンテナでは不完全型を明示的に禁止しました。
不完全型を許可することの潜在的な欠点
不完全型を許可すると、高度なデータ構造が可能になる可能性があります、実行時の問題が発生する可能性もあります。不完全型には必要な情報が不足しているため、コンテナがメモリ割り当てやオブジェクトの有効期間を管理することが困難になります。
将来の可能性
C 委員会は、不完全型を許可することの潜在的な利点を認めています。種類。 2002 年に、ライブラリ ワーキング グループの議長は、C の将来のバージョンではこの制限が緩和される可能性があることをほのめかしました。ただし、現在の標準の時点では、禁止事項はそのままです。
Boost のソリューション
標準のアプローチの限界を認識し、Boost 開発者は、次のことができる独自のコンテナを作成しました。不完全な型を扱う。これにより、標準ライブラリでは不可能だった再帰的データ構造の作成が可能になりました。
C 17 部分的許可
C 17 では、この制限の部分的な緩和が導入されました。コンテナーを使用すると、コンテナーの要素タイプまたはキー タイプで前方宣言された型に対して不完全な型を使用できるようになります。この制限された許容値により、既存の実装の安定性を維持しながら、一部の最新のプログラミング パターンとの互換性が向上します。
以上がC 標準コンテナが不完全型を使用できない理由とその回避策は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。