「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 異種オブジェクトを C++ コンテナに保存する方法: boost::any またはカスタム実装?

異種オブジェクトを C++ コンテナに保存する方法: boost::any またはカスタム実装?

2024 年 11 月 8 日に公開
ブラウズ:351

 How to Store Heterogeneous Objects in C   Containers: boost::any or Custom Implementation?

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;
};

ただし、このアプローチには次のような制限と潜在的な落とし穴があります。

  • ユニオンでは一度に 1 つのアクティブなメンバーしか許可されません。
  • 非アクティブなメンバーの読み取り未定義の動作が発生する可能性があります。
  • 正しい型が指定されていることを確認するには、慎重な取り扱いが必要です。

結論

異種オブジェクトを C コンテナに保存する必要がある場合は、安全性と有効性を確保するために boost::any ライブラリの使用を検討してください。 。必要に応じて、構造体または共用体を使用してカスタム実装を作成できますが、その制限事項に注意してください。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3