4

データを hdf ファイルに保存する必要があるアプリケーションがあります。

実際にC++オブジェクトであるhdfにデータセットを保存することは可能ですか? たとえば、a以下のオブジェクトに含まれるデータを hdf ファイル (hdf4 または hdf5) に保存したいとします。私はこれを行うことができますか?はいの場合、誰かがこれを行うことを示していただければ幸いです。ありがとうございました。

class A(){

public:
   A(int i, double j):i(i), j(j){};
   ~A();
   int i;
   double j;
   int* ai;
   vector<int> b;
   setValues(int i, double j){};
}

void main(){

  A *a;
  a = new A(10, 10.2);

  // Store this data to hdf4 or hdf5


  //
  A *a2;

  // now read in the data stored in hdf file and assign the value here

}
4

2 に答える 2

1

1 つのオプションは、複合型を使用し、構造体メンバーを HDF でサポートされる基本型に明示的にマップすることです。

アプローチでこれを見つけた唯一の複雑さは、リストとシーケンスの場合です。1 つのオプションは、リスト アイテムを別のデータセットに格納してから、開始インデックスと終了インデックスを参照することです。

データが連続していないか、より複雑な場合の 1 つの方法は、連結リスト型の構造を使用することです。したがって、次の場合:

class A {
    int i;
    vector<int> b;
}

これは次のようにマッピングされます。

ADataset => { i, b_index };
BDataset => { value, next_index };

「ADataset」のレコードは「b_index」を格納します。「BDataset」の各レコードには、そのレコードの値と、オプションの next_index が含まれます。いつ停止するかを知るために、「next_index」にセンチネル値を使用できます。

于 2012-02-10T00:06:39.897 に答える
0

クラス属性が単純な型 ( intfloatchar... そのような型の配列でさえ) である場合、それらを複合データ型に保存できます。

あなたが示すクラスの例には、 STL がありvectorます。STL コンテナーがある場合は、おそらくBoost serializationを使用することをお勧めします。出力は、hdf5 ファイル内に保存できる ASCII テキストになります。

ストレージ効率が主な関心事である場合は、たとえば可変サイズの配列に s を書き込むことに注意する必要がありvectorます。より一般的には、STL コンテナー (および/またはカスタム オブジェクト) と、選択した hdf5 データ型との間の変換を行う必要があります。 hdf5 ファイルとの間でオブジェクトをエクスポートおよびインポートするときに、それらを保存します。

于 2011-11-27T18:03:16.730 に答える