关于c ++模板语法的说明

时间:2015-02-09 21:37:42

标签: c++ templates

我正在查看以下帖子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 };  
};

1 个答案:

答案 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无效。