我想创建一个模板函数来读取文件中具有某个名称的数据集。这些函数可以读取以下类型中的任何一种:浮点型、双精度或长双精度。我可以根据模板的参数来赋值数据类型吗?现在,我只能使用以下命令来完成:
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);
} 发布于 2017-05-22 00:47:53
我不知道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>();发布于 2017-05-22 00:45:47
添加将改变功能的额外模板
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);
} https://stackoverflow.com/questions/44099262
复制相似问题