2017-05-13 16 views
-5

私はC++にはかなり新しいです。私は、C++の構造体はコンパイル時に作成されるので、おそらく動的構造体を行う方法はないと読んでいます。しかし、私の状況に合った別のコンテナタイプがありますか? HDF5ファイルからデータを解析し、C++で使用したいと思っています。だから私はコンパイル時に内容を知らない。C++の構造体を動的に作成するには?

基本的に私は3つのタイプ(A、B、C)にしたいのですが、HDF5ファイルで提供されている名前でアクセスすることができます。しかし、私はタイプA、BまたはCのオブジェクトの数をコンパイル時に知りません。しかし、HDF5ファイルを解析するとき、私は見つけることができます。それをサポートしているC++のコンテナはありますか?それとも私自身で作成する必要がありますか?

+0

本当に3つのタイプ( 'A'、' B'、 'C')しかない場合は、問題が複雑になります。単にA、B、Cの3つのベクトルをそれぞれ含む構造体を使用してください – user463035818

+1

あなたのすべての質問はここで答えるつもりです(http://stackoverflow.com/questions/388242/the-definitive- c-book-guide-and-list)を参照してください。もしあなたが「C + +の初心者」であれば、言語の基礎を十分に理解することなく、やや複雑なタスクを実行しようとするのではなく、学習に時間を費やすべきです。あなたが記述したものは、やや複雑な作業以上のものは何もありませんが、C++を最初に知る必要があります。まずC++の本を選んで、それから読んでみましょう。 –

+0

"*私はC++の構造体はコンパイル時に作成されるので、おそらく動的な構造体を実行する方法はないと読んでいます*"私はそのステートメントがC++の中で何かを意味するとは思わない。 – juanchopanza

答えて

3

文字列でデータにアクセスする場合は、std::map<std::string, T>を使用できます。 次の質問は、タイプTとは何ですか? コンパイル時に対処したい型が分かっているので、std::variant(またはstd :: any)が正しい型のコンテナです。 C++ 17が無ければ、boost :: variantを見てみましょう。基本的にタグ付きの共用体です。タイプX用のシンプルな非一般的な実装では、Yは次のようになります。

struct XY { 
    union { 
     X x; 
     Y y; 
    }; 
    bool isX; 
    XY(X const& x) :x{x}, isX{true} {} 
    XY(Y const& y) :y{y}, isX{false} {} 
}; 

をあなたが保存されているタイプをチェックし、それを取得することができます。このデータ構造で。 std :: mapとstd::map<std::string, XY>を組み合わせると、その名前でアクセスできます。

関連する問題