Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中创建模板结构之间的差异+;_C++ - Fatal编程技术网

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

C++ 在C+中创建模板结构之间的差异+;,c++,C++,两者的区别是什么 #define Q_DECLARE_METATYPE(TYPE) \ template <> \ struct QMetaTypeId< TYPE > \ {

两者的区别是什么

#define Q_DECLARE_METATYPE(TYPE)                                        \
    template <>                                                         \
    struct QMetaTypeId< TYPE >                                          \
    {                                                                   \
       ...                                                              \
    };                                                                  \
\define Q\u DECLARE\u元类型(TYPE)\
模板\
结构QMetaTypeId\
{                                                                   \
...                                                              \
};                                                                  \

\define Q\u DECLARE\u元类型(TYPE)\
模板\
结构QMetaTypeId\
{                                                                   \
...                                                              \
};                                                                  \

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

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

每种方法的示例如下:

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
Q\u DECLARE\u METATYPE2(typename T)//主模板
Q_DECLARE_METATYPE1(int)//int的专门化
qmeta型//使用专门化
qmetab型//使用主模板

第二个版本似乎很奇怪,而第一个版本可能用于使库用户能够轻松地为自己的类型声明库模板类的专门化。

第二个版本定义了一个名为
QMetaTypeId
的模板类,其中包含为
类型提供的模板参数。声明后,可以为不同的模板参数定义
QMetaTypeId
的专门化

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

每种方法的示例如下:

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
Q\u DECLARE\u METATYPE2(typename T)//主模板
Q_DECLARE_METATYPE1(int)//int的专门化
qmeta型//使用专门化
qmetab型//使用主模板
第二个版本似乎很奇怪,而第一个版本可能用于让库用户更容易为自己的类型声明库模板类的专门化。二是,

引用文件:

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

首先是。二是,

引用文件:

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


在第一个示例中,您是从第二个示例中声明专门化在第一个示例中,您是从第二个示例中声明专门化您可以添加链接到您可以添加链接到