c++模板语法说明

Explanation on c++ template syntax

本文关键字:说明 语法 c++      更新时间:2023-10-16

我看到了以下写boost的帖子::multi_array到hdf5数据集,无法理解Leo Goodstadt第一个答案中模板使用的语法。不幸的是,我没有足够的声誉来直接评论那里给出的答案,这就是为什么我创建了这个单独的问题。

据我所知,有一个结构是用静态方法type()创建的,它返回相应的类型。

然后,此泛型结构将被具有固定类型的结构覆盖。但是花括号里到底写了什么,也就是说它的意思是什么?例如,以下内容的含义是什么:

{ H5::IntType type {   H5::PredType::NATIVE_CHAR
                   };  
};

在字符模板的第一个定义中:

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 };  
};

卷曲语法是初始化

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没有用处。