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 没有用的标记。