创建模板函数以读取hdf5中的任意数据类型

时间:2017-05-21 16:33:30

标签: c++ hdf5

我想创建一个模板函数来读取文件中具有某个名称的数据集。 这些函数可以读取以下任何一种类型:float,double或long double。 我可以根据模板的参数来分配数据类型吗? 现在我只能使用:

function wrapSpans(start, end) {
  var $cont = $('.span-container'),
     //collection of all spans
    $spans = $cont.children();
  // loop all the containers and filter children to wrap
  $cont.each(function() {
    $(this).children('span').filter(function() {
      var idx = $spans.index(this); // index within all spans collection     
      return idx >= (start - 1) && idx <= end;
    }).wrapAll('<span class="wrapped">');
  });
}

wrapSpans(3, 12)

2 个答案:

答案 0 :(得分:1)

我不知道HDF5是什么,但看起来你可以做到以下几点:

template<typename T>
H5::DataType get_datatype_for();

template<>
H5::DataType get_datatype_for<float>() { return H5::PredType::NATIVE_FLOAT; }

然后在你的函数中:

H5::DataType dt = get_datatype_for<T>();

答案 1 :(得分:0)

添加额外的模板,这将改变功能

template <typename T>
class DataTypeFor
{
public:
}

template <>
class DataTypeFor<int>
{
public:
    const H5::DataType value = H5::PredType::NATIVE_INT;
}

template <>
class DataTypeFor<float>
{
public:
    const H5::DataType value = H5::PredType::NATIVE_FLOAT;
}

template <>
class DataTypeFor<double>
{
public:
    const H5::DataType value = H5::PredType::NATIVE_DOUBLE;
}

template <typename T>
void gethdf(T * l, H5::H5File *  file,  char * name )
{
  H5::DataSet dataset = H5::DataSet(file->openDataSet(name));
  H5::DataType dt;

  dt = DataTypeFor<T>::value;
  ...
  dataset.read(l, dt);
}