hdfにデータセット(C ++クラスのインスタンス)を格納する

私は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 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 答え

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

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

データが連続していないか、またはより複雑である場合、1つのアプローチは、リンクされたリスト型構造を使用することです。だから次のように:

class A {
    int i;
    vector b;
}

これは次のようにマップされます:

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

'ADataset'のレコードには 'b_index'が格納されます。 'BDataset'の各レコードには、そのレコードの値とオプションのnext_indexが含まれています。 sentinelの値は 'next_index'のためにいつ停止するかを知るために使うことができます。

1
追加された

あなたのクラス属性がシンプルな型( int float char ...など)であれば、 。

表示するサンプルクラスには、STL vector があります。 STLコンテナがあれば、ブーストシリアライゼーション出力は、hdf5ファイル内に格納できるASCIIテキストになります。

格納効率が重視される場合は、たとえば可変長配列に vector を記述してください。より一般的には、STLコンテナ(および/またはカスタムオブジェクト)とhdf5ファイルとの間でオブジェクトをエクスポートおよびインポートするときに、それらを保存するhdf5データ型を選択します。

0
追加された