C コンテナへの異種オブジェクトの保存
C コンテナには通常、同種の要素が必要です。つまり、単一タイプのオブジェクトのみを保持できます。ただし、状況によっては、さまざまなデータ型を収容できるコンテナーが必要になることがあります。この記事では、boost::any ライブラリとカスタム アプローチを使用してこれを実現する方法について説明します。
boost::any の使用
boost::any はテンプレート クラスです。任意の C 型を保持できます。 boost::any のインスタンスをコンテナーに保存すると、異種のオブジェクトのコレクションを持つことができます。このアプローチは、堅牢性とエッジ ケースの処理の点で推奨されます。
カスタム実装
より手動のアプローチを希望する場合は、カスタム構造体またはユニオンを作成できます。予想されるすべての型のメンバーとインジケーターを組み合わせて、アクティブな型を指定します。
構造体アプローチ:
struct HeterogeneousContainer {
int i;
std::string s;
double d;
int type; // 0 for int, 1 for string, 2 for double
};
ユニオンアプローチ (注意して使用してください):
union HeterogeneousContainer {
int i;
std::string s;
double d;
};
ただし、このアプローチには次のような制限と潜在的な落とし穴があります。
結論
異種オブジェクトを C コンテナに保存する必要がある場合は、安全性と有効性を確保するために boost::any ライブラリの使用を検討してください。 。必要に応じて、構造体または共用体を使用してカスタム実装を作成できますが、その制限事項に注意してください。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3