C コンテナへの異種オブジェクトの保存
C コンテナは通常、同種の要素を必要とし、単一タイプのオブジェクトのみを保持できます。ただし、状況によっては、さまざまなデータ型を収容できるコンテナーが必要になることがあります。この記事では、boost::any ライブラリとカスタム アプローチを使用してこれを実現する方法について説明します。
boost::any の使用
boost::any はテンプレート クラスです。任意の C 型を保持できます。 boost::any のインスタンスをコンテナーに保存すると、異種のオブジェクトのコレクションを持つことができます。このアプローチは、堅牢性とエッジ ケースの処理の点で推奨されます。
カスタム実装
より手動のアプローチを希望する場合は、カスタム構造体またはユニオンを作成できます。アクティブなタイプを指定するインジケーターとともに、予期されるすべてのタイプのメンバーを組み合わせます。
構造アプローチ:
<code class="cpp">struct HeterogeneousContainer { int i; std::string s; double d; int type; // 0 for int, 1 for string, 2 for double };</code>
ユニオン アプローチ (注意して使用してください) :
<code class="cpp">union HeterogeneousContainer { int i; std::string s; double d; };</code>
ただし、このアプローチには次のような制限と潜在的な落とし穴があります。
結論
異種オブジェクトを C コンテナに保存する必要がある場合は、安全性と有効性を確保するために boost::any ライブラリの使用を検討してください。必要に応じて、構造体または共用体を使用してカスタム実装を作成できますが、その制限事項に注意してください。
以上が異種オブジェクトを C コンテナに保存する方法: boost::any またはカスタム実装?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。