C++ 类型为&;的模板类中类型参数的部分专门化;模板参数
我想专门化以下模板类的类型参数,它有一个类型参数和一个模板参数:C++ 类型为&;的模板类中类型参数的部分专门化;模板参数,c++,templates,partial-specialization,template-templates,C++,Templates,Partial Specialization,Template Templates,我想专门化以下模板类的类型参数,它有一个类型参数和一个模板参数: template < typename T, template <typename E> class Foo > class Bar; (二) 模板< 模板类Foo >分类栏; (三) 模板< 模板类Foo >分类栏; (四) 模板< 模板类Foo 分类栏; 为什么它们都不起作用 关于每个适用代码段的最后一行: typename是否澄清E是类Foo使用的类型,或者此语法只能在Bar
template <
typename T,
template <typename E> class Foo
> class Bar;
(二)
模板<
模板类Foo
>分类栏;
(三)
模板<
模板类Foo
>分类栏;
(四)
模板<
模板类Foo
分类栏;
为什么它们都不起作用
关于每个适用代码段的最后一行:
是否澄清typename
是类E
使用的类型,或者此语法只能在Foo
的类定义的Bar
主体中使用{}
- 不
澄清template
是一个模板,因此阻止编译器像这样解析Foo
Foo:
template <template <typename E> class Foo> class Bar<int, Foo> { // ... };
您甚至可以省略内部参数名称模板 分类栏 { // ... };
,因为它没有任何用途。如下所示:E
template <template <typename E> class Foo> class Bar<int, Foo> { // ... };
您甚至可以省略内部参数名称模板 分类栏 { // ... };
,因为它没有任何用途E
是否澄清typename
是类E
使用的类型,或者此语法只能在Foo
的类定义的Bar
主体中使用{}
仅在模板定义中定义类型(也可以使用typename
)或访问依赖类型(依赖于模板参数的类型)时使用 有关更多信息(甚至关于何时使用class
),请参阅 我怎样才能让它工作 模板参数内类型的名称实际上无法使用。这只是一种形式。您必须将另一个模板参数添加到主模板:模板
此外,如果这是模板模板< 模板类Foo, 类型名E >类条{…};
的专门化,则Bar
需要一个主模板来专门化:Bar
template<typename T, typename U> struct Bar; template < template<typename> class Foo, typename E > class Bar<int, Foo<E>> { ... };
模板 结构杆; 模板< 模板类Foo, 类型名E >类条{…};
是否澄清typename
是类E
使用的类型,或者此语法只能在Foo
的类定义的Bar
主体中使用{}
仅在模板定义中定义类型(也可以使用typename
)或访问依赖类型(依赖于模板参数的类型)时使用 有关更多信息(甚至关于何时使用class
),请参阅 我怎样才能让它工作 模板参数内类型的名称实际上无法使用。这只是一种形式。您必须将另一个模板参数添加到主模板:模板
此外,如果这是模板模板< 模板类Foo, 类型名E >类条{…};
的专门化,则Bar
需要一个主模板来专门化:Bar
template<typename T, typename U> struct Bar; template < template<typename> class Foo, typename E > class Bar<int, Foo<E>> { ... };
请给出一个完整的工作示例好吗?我遵循了你的建议,要么是我误解了它,要么就是它无法编译。我包括了另一个被注释掉的备选方案,它也无法编译。+1,这是我想首先解释的。@CodeBricks您的主模板不正确模板 结构杆; 模板< 模板类Foo, 类型名E >类条{…};
是一种类型,因此主模板中的第二个参数也应该是@0x499602D2您的解决方案已编译!我的结论正确吗?主模板的类型参数Foo
专用于两个参数:E
和template class Foo
?@CodeBricks否。模板参数typename E
的名称是任意名称。事实上,由于该名称没有在主模板中的任何位置使用,因此可以将其删除,从而生成E
模板类栏代码>。唯一正在发生的专门化是在第二个模板中,其中模板名称与
的主模板定义没有任何关系。唯一重要的是在专门化中如何配置类型。请给出一个完整的工作示例好吗?我遵循了你的建议,要么是我误解了它,要么就是它无法编译。我包括了另一个被注释掉的备选方案,它也无法编译。+1,这是我想首先解释的。@CodeBricks您的主模板不正确Bar
是一种类型,因此主模板中的第二个参数也应该是@0x499602D2您的解决方案已编译!我的结论正确吗?主模板的类型参数Foo
专用于两个参数:E
和template class Foo
?@CodeBricks否。模板参数typename E
的名称是任意名称。事实上,由于该名称没有在主模板中的任何位置使用,因此可以将其删除,从而生成E
模板类栏代码>。唯一正在发生的专门化是在第二个模板中,其中模板名称与
的主模板定义没有任何关系。唯一重要的是在专门化中如何配置类型。Bar
template <template <typename E> class Foo> class Bar<int, Foo> { // ... };
template<typename T, typename U> struct Bar; template < template<typename> class Foo, typename E > class Bar<int, Foo<E>> { ... };