C ++中模板结构创建的区别

时间:2016-10-11 14:53:15

标签: c++

之间有什么区别
#define Q_DECLARE_METATYPE(TYPE)                                        \
    template <>                                                         \
    struct QMetaTypeId< TYPE >                                          \
    {                                                                   \
       ...                                                              \
    };                                                                  \

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

2 个答案:

答案 0 :(得分:1)

第二个定义了一个名为... if ($form->isSubmitted() && $form->isValid()) { $client = new Client([ 'base_uri' => 'foo.local', ]); $response = $client->request('GET', '/bar'); 的模板类,其中包含为QMetaTypeId提供的模板参数。声明后,可以为不同的模板参数定义TYPE的特化。

第一个定义了模板参数为QMetaTypeIdQMetaTypeId模板类的特化。它假设已经存在一个模板类,我可以将其专门化。

每个例子:

TYPE

第二个版本看起来很奇怪,而第一个版本可能会用来让库的用户轻松地为他们自己的类型声明库模板类的特化。

答案 1 :(得分:1)

首先是explicit template specialization。第二个是template definition

来自文档的引用:

  

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