同时专门化外部类和嵌套类
Simultaneously specializing outer and nested class
下面的类模板Sequencer
包含一个嵌套的类模板Process
,带有两个模板参数。
template<typename P>
struct Sequencer
{
template<typename A , bool = A::CAN_BE_BUFFERED>
struct Process;
};
我想将Sequencer
专门化为自定义struct Foo
,同时专门化其自己版本的Process
以仅支持一个模板参数,如下所示
template<>
struct Sequencer<Bar>
{
template<typename A>
struct Process;
};
由于实现时间太长,我已经在ideone上发布了整个列表。
在GCC 4.5.3上,我收到以下错误消息
prog.cpp:60:24: error: partial specialization ‘Sequencer<Bar>::Process<A>’ does not specialize any template arguments
在Visual Studio 2008上,我得到以下错误
prog.cpp(62) : error C2753: 'Sequencer<Bar>::Process<A>' : partial specialization cannot match argument list for primary template
Sequencer<Bar>::Process
是一个完整的模板,它不是专门化的。它恰好是一个专业的成员。你不应该宣称它是一个专业化:
template<typename A>
struct Sequencer<Bar>::Process/*<A>*/
//^ remove this
{
};
模板应该被认为是"类生成器"。Sequencer<P>
定义了从任意P
生成类的方法,其中Sequencer<Bar>
在实例化Sequencer<Bar>
时给出了要生成的特定类。每个生成的类都是完全分离和不相关的(除了由同一个生成器创建之外)。在这种情况下,这意味着Sequencer<Bar>
中的内部类与Sequencer<P>
中的内部类没有关系。
相关文章:
- 嵌套在类中时无法设置成员数据
- 无法访问嵌套类.类的使用无效
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 如何在C++中初始化嵌套类中的2个memeber
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 在C++中搜索嵌套多映射值
- 在C++中将矢量转换为嵌套地图
- C++嵌套if语句,基本货币交换
- C++ 在外部使用嵌套结构实现类函数
- 另一个类中嵌套模板的外部实例化
- C++嵌套循环,外部有变量
- LLVM - 如何使嵌套函数看到外部函数的变量
- c++嵌套类未解析的外部符号
- 模板化方法中使用的嵌套类的未解析外部符号
- 外部具有动态分配的嵌套类中的类
- C++ 嵌套'if'语句中的所有代码都会运行,即使这会更改外部语句的布尔值?
- 嵌套的向量迭代忽略外部向量位置
- 为什么我必须为嵌套匿名名称空间中的函数指定外部名称空间
- OpenMP -嵌套for循环在外部循环之前并行时变得更快.为什么
- 从内部到外部展开嵌套宏