ホームページ > バックエンド開発 > C++ > 単一の C コンテナーに異なるデータ型を格納するにはどうすればよいですか?

単一の C コンテナーに異なるデータ型を格納するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-10-26 08:55:29
オリジナル
246 人が閲覧しました

How can I store different data types in a single C   container?

単一の C コンテナに異なるデータ型を格納する方法

C では、通常、ベクトルやマップなどのコンテナは単一のオブジェクトを保持します。データ型。ただし、複数のタイプのオブジェクトを同じコンテナに保存したい場合があります。

この課題に対処するには、Boost.Any の使用を検討してください。 Boost.Any は、任意のデータ型を表すことができるテンプレート クラスです。 Boost.Any のインスタンスをコンテナに保存すると、同じコレクション内に異なる型のオブジェクトを保持できます。

Boost.Any の使用方法の例を次に示します。

<code class="cpp">#include <boost/any.hpp>
#include <vector>

int main() {
  std::vector<boost::any> myContainer;

  int x = 5;
  std::string y = "Hello";
  double z = 3.14;

  // Add objects of different types to the container
  myContainer.push_back(boost::any(x));
  myContainer.push_back(boost::any(y));
  myContainer.push_back(boost::any(z));

  // Retrieve objects from the container and cast them to their original types
  int recoveredX = boost::any_cast<int>(myContainer[0]);
  std::string recoveredY = boost::any_cast<std::string>(myContainer[1]);
  double recoveredZ = boost::any_cast<double>(myContainer[2]);

  // Use the recovered objects
  std::cout << recoveredX << std::endl;
  std::cout << recoveredY << std::endl;
  std::cout << recoveredZ << std::endl;

  return 0;
}</code>
ログイン後にコピー

もう 1 つのオプションは、カスタムの Union または Struct を作成することです。共用体を使用すると、異なるデータ型を同じメモリ位置に格納できます。一方、構造体は、異なる型の複数のデータ メンバーを保持できます。ただし、間違ったメンバーにアクセスすると共用体は未定義の動作をする可能性があり、1 つのメンバーだけがアクティブに使用される場合は構造体が非効率になる可能性があります。

最終的に、最適なアプローチはアプリケーションの特定の要件と制約によって異なります。各オプションの長所と短所を考慮して、最も適切な解決策を決定してください。

以上が単一の C コンテナーに異なるデータ型を格納するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート