c++模板语法解释
Explanation on c++ template syntax
我正在查看以下 post write a boost::multi_array to hdf5 dataset 并且无法理解 Leo Goodstadt 在第一个答案中用于模板的语法。不幸的是,我没有足够的声誉直接评论那里给出的答案,这就是为什么我创建了这个单独的问题。
据我所知,有一个结构是用静态方法 type() 创建的,returns 相应的类型。
此通用结构随后被具有固定类型的结构覆盖。但是花括号中到底写了什么,即它的含义是什么?比如下面的是什么意思:
{ H5::IntType type { H5::PredType::NATIVE_CHAR
};
};
在字符模板的第一个定义中:
template<> struct get_hdf5_data_type<char> {
H5::IntType type {
H5::PredType::NATIVE_CHAR
};
};
我已经在下面复制了模板定义的基本部分,但为了清楚起见,查看原文可能更容易post。
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 };
};
curly 语法是初始化
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
没有用的标记。
我正在查看以下 post write a boost::multi_array to hdf5 dataset 并且无法理解 Leo Goodstadt 在第一个答案中用于模板的语法。不幸的是,我没有足够的声誉直接评论那里给出的答案,这就是为什么我创建了这个单独的问题。
据我所知,有一个结构是用静态方法 type() 创建的,returns 相应的类型。
此通用结构随后被具有固定类型的结构覆盖。但是花括号中到底写了什么,即它的含义是什么?比如下面的是什么意思:
{ H5::IntType type { H5::PredType::NATIVE_CHAR
};
};
在字符模板的第一个定义中:
template<> struct get_hdf5_data_type<char> {
H5::IntType type {
H5::PredType::NATIVE_CHAR
};
};
我已经在下面复制了模板定义的基本部分,但为了清楚起见,查看原文可能更容易post。
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 };
};
curly 语法是初始化
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
没有用的标记。