我正在查看以下帖子write a boost::multi_array to hdf5 dataset,并且无法理解Leo Goodstadt在第一个答案中使用的模板语法。不幸的是,我没有足够的声誉直接评论那里给出的答案,这就是为什么我已经创建了这个单独的问题。
据我所知,这是一个使用静态方法type()创建的结构,它返回相应的类型。
然后,这个通用结构将被具有固定类型的结构覆盖。但究竟是什么写在花括号中,即它的含义是什么?例如,以下内容的含义是什么:
{ H5::IntType type { H5::PredType::NATIVE_CHAR
};
};
在char-template的第一个定义中:
template<> struct get_hdf5_data_type<char> {
H5::IntType type {
H5::PredType::NATIVE_CHAR
};
};
我已经复制了模板定义的基本部分,但可能更容易查看原始帖子以获得清晰的图片。
template<typename T> struct get_hdf5_data_type {
static H5::PredType type() {
//static_assert(false, "Unknown HDF5 data type");
return H5::PredType::NATIVE_DOUBLE;
}
};
template<> struct get_hdf5_data_type<char> {
H5::IntType type { H5::PredType::NATIVE_CHAR };
};
template<> struct get_hdf5_data_type<long long> {
H5::IntType type { H5::PredType::NATIVE_LLONG };
};
template<> struct get_hdf5_data_type<unsigned long long> {
H5::IntType type { H5::PredType::NATIVE_ULLONG };
};
template<> struct get_hdf5_data_type<int8_t> {
H5::IntType type { H5::PredType::NATIVE_INT8 };
};
答案 0 :(得分:0)
卷曲语法是初始化
H5::IntType type { H5::PredType::NATIVE_CHAR };
类似于
H5::IntType type = H5::PredType::NATIVE_CHAR;
我不熟悉H5,但是OP然后将其用作hdf_data_type.type
,它只是引用先前在特化列表中定义的特定类型。
现在hdf_data_type
需要是提供的模板特化之一,例如get_hdf5_data_type<char>
,以提供类型的定义。
通用模板中注释掉的static_assert可用作未找到已知特化的标记,并且对象hdf_data_type
无效。