単一の 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 サイトの他の関連記事を参照してください。