hello, did you try H5CPP <http://h5cpp.ca/>? You can find the implemented functionality in the code base or freely use the C++14 template library for vectors, and armadillo matrices. The github page is here <https://github.com/steven-varga/h5cpp>
At this stage the profiled templates can handle armadillo vectors, matrices and cubes, as well stl vectors and structs. best, steven On Mon, Feb 5, 2018 at 6:03 PM, Miller, Mark C. <[email protected]> wrote: > Hi All, > > > > I am wondering if anyone else in C++ coding of HDF5 has run into the > following problem… > > > > I have a templatized function that writes an HDF5 dataset… > > > > template <class T> static void WriteVecToHDF5(hid_t fid, char const *name, > std::vector<T> const &vec, int d2size) > > { > > hsize_t siz2d[2] = {(hsize_t) vec.size() / d2size, d2size}; > > hid_t spid = H5Screate_simple(d2size>1?2:1, siz2d, 0); > > hid_t dsid = H5Dcreate(fid, name, *HDF5Type<T>().Type()*, spid, > H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); > > H5Dwrite(dsid, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &vec[0]); > > H5Dclose(dsid); > > H5Sclose(spid); > > } > > > > I would like the template instantiation to then return the correct > H5T_NATIVE_XXX type so WriteVecToHDF5<int>(…) produces a call to H5Dcreae, > there in *bold red* with H5T_NATIVE_INT, etc. > > > > There does not appear to be any support in the HDF5 implementation for > this. Am I missing something? > > > > Below is what I did (for int, float and double but can easily be expanded > to cover all primitive types) and am wondering if others find this useful > enough (or something like it) that it ought to be included in HDF5 C++ > interface? > > > > > > // base class > > template <class T> class HDF5TypeBase { > > public: > > HDF5TypeBase() {} ; > > virtual ~HDF5TypeBase() {}; > > }; > > > > > > // base class for type-specific template specializations to follow > > template <class T> class HDF5Type : public HDF5TypeBase<T> { > > public: > > HDF5Type() : HDF5TypeBase<T>() {}; > > virtual ~HDF5Type() {}; > > virtual hid_t Type() const { return H5T_NATIVE_HERR; }; > > }; > > > > // int, H5T_NATIVE_INT specialization > > template <> class HDF5Type<int> : public HDF5TypeBase<int> { > > public: > > HDF5Type() : HDF5TypeBase<int>() {}; > > virtual ~HDF5Type() {}; > > virtual hid_t Type() const { return H5T_NATIVE_INT; }; > > }; > > > > // float, H5T_NATIVE_FLOAT specialization > > template <> class HDF5Type<float> : public HDF5TypeBase<float> { > > public: > > HDF5Type() : HDF5TypeBase<float>() {}; > > virtual ~HDF5Type() {}; > > virtual hid_t Type() const { return H5T_NATIVE_FLOAT; }; > > }; > > > > // double, H5T_NATIVE_DOUBLE specialization > > template <> class HDF5Type<double> : public HDF5TypeBase<double> { > > public: > > HDF5Type() : HDF5TypeBase<double>() {}; > > virtual ~HDF5Type() {}; > > virtual hid_t Type() const { return H5T_NATIVE_DOUBLE; }; > > }; > > > > This permits in the HDF5Type<T>().Type(), *bold red*, in the snipit > above, to actually work > > > > -- > > Mark C. Miller, LLNL > > > > "In the end, we will remember not the words of > > our enemies but the silence of our friends" - MLK > > _______________________________________________ > Hdf-forum is for HDF software users discussion. > [email protected] > http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org > Twitter: https://twitter.com/hdf5 >
_______________________________________________ Hdf-forum is for HDF software users discussion. [email protected] http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org Twitter: https://twitter.com/hdf5
