首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建一个模板函数来读取hdf5中的任意数据类型

创建一个模板函数来读取hdf5中的任意数据类型
EN

Stack Overflow用户
提问于 2017-05-22 00:33:30
回答 2查看 179关注 0票数 0

我想创建一个模板函数来读取文件中具有某个名称的数据集。这些函数可以读取以下类型中的任何一种:浮点型、双精度或长双精度。我可以根据模板的参数来赋值数据类型吗?现在,我只能使用以下命令来完成:

代码语言:javascript
运行
复制
template <typename T>
void gethdf(T * l, H5::H5File *  file,  char * name )
{
  H5::DataSet dataset = H5::DataSet(file->openDataSet(name));
  H5::DataType dt;

  if(typeid(T) == typeid(float) )
     dt = H5::PredType::NATIVE_FLOAT;

     ...

 dataset.read(l, dt);
} 
EN

回答 2

Stack Overflow用户

发布于 2017-05-22 00:47:53

我不知道HDF5是什么,但看起来您可以执行以下操作:

代码语言:javascript
运行
复制
template<typename T>
H5::DataType get_datatype_for();

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

然后在你的函数中:

代码语言:javascript
运行
复制
H5::DataType dt = get_datatype_for<T>();
票数 1
EN

Stack Overflow用户

发布于 2017-05-22 00:45:47

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

代码语言:javascript
运行
复制
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);
} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44099262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档