【发布时间】:2022-01-21 13:28:22
【问题描述】:
如何在不部分特化嵌套ing类的情况下部分特化嵌套ed类?
class C 的实现对于所有 N 都是相同的。
C::iterator 的实现对于 N=1 是特殊的。
template<class T, int N>
class C
{
class iterator;
...
};
template<class T, int N>
class C<T, N>::iterator
{
...
};
// Partial specialization doesn't compile:
template<class T>
class C<T, 1>::iterator
{
...
};
我可以将 class C 部分专门化为 N=1,但这是很多代码重复...
【问题讨论】:
-
在您的实际代码中,
iterator中的C是不是像这里一样的非模板?如果是这样,那是你的问题。iterator需要是模板才能对其进行专门化。 -
你想部分特化迭代器,但迭代器不是模板。部分专门化不是模板的东西没有多大意义。专业化 C 是有意义的,因为它是模板。
-
所以您试图根据非类型模板参数
N的值来提供iterator的不同定义? -
@WBuck 是的,正如上面的人所说,
iterator本身如果不是模板类。所以我看到错误来自哪里。尽管如此,为N=1复制class C代码是很烦人的。