C++中模板结构创建之间的差异

  • 本文关键字:之间 创建 结构 C++ c++
  • 更新时间 :
  • 英文 :


之间有什么区别

#define Q_DECLARE_METATYPE(TYPE)                                        
    template <>                                                         
    struct QMetaTypeId< TYPE >                                          
    {                                                                   
       ...                                                              
    };                                                                  

#define Q_DECLARE_METATYPE(TYPE)                                        
    template <TYPE>                                                     
    struct QMetaTypeId                                                  
    {                                                                   
       ...                                                              
    };                                                                  

第二个定义了一个名为QMetaTypeId的模板类,其中包含为TYPE提供的模板参数。一旦声明了这一点,就可以为不同的模板参数定义QMetaTypeId的专门化。

第一个定义了当模板参数为TYPEQMetaTypeId模板类的专门化。它假设已经存在一个模板类,可以对其进行专门化。

每个示例:

Q_DECLARE_METATYPE2(typename T) //primary template
Q_DECLARE_METATYPE1(int) //specialization for int
QMetaType<int> a; //uses the specialization
QMetaType<float> b; //uses the primary template

第二个版本看起来很奇怪,而第一个版本可能用于让库的用户更容易为自己的类型声明库模板类的专门化。

第一个是显式模板专门化。二是模板定义。

引用文件:

显式专用化只能出现在命名空间范围内,与主模板位于同一命名空间中(如果主模板是成员模板,则显示在最近的封闭命名空间中(,并且它必须出现在非专用化模板声明之后。

相关内容

最新更新