如何部分專門鳥巢版類沒有專門部分鳥巢ING類?
的實作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,但這是很多代碼重復......
uj5u.com熱心網友回復:
如果您不想專門化整個類,那么只需將迭代器移出類并使其成為模板:
template<class T, int N>
class C_iterator
{
...
};
如果需要,使您的專業化:
template<class T>
class C_iterator<T, 1>
{
...
};
然后在你的類中使用它作為迭代器,如果需要的話:
template<class T, int N>
class C
{
using iterator = C_iterator<T, N>;
friend iterator;
...
};
uj5u.com熱心網友回復:
通過重新宣告迭代器類,您希望它以您想要的方式作業。
template<class T, int N>
class C
{
public:
class iterator {};
};
// Partial specialization doesn't compile:
template<class T>
class C<T, 1>
{
public:
class iterator { public: bool specialization; };
};
下面的代碼用于測驗。
void test()
{
C<int, 2>::iterator
{
};
C<int, 1>::iterator
{
.specialization = true
};
}
結果
template<class T, int N>
class C
{
class iterator {};
};
template<class T>
class C<T, 1>
{
class iterator {};
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/386256.html
上一篇:Shopify應用程式/Nextjs:如何讓RoutePropagator作業?
下一篇:為什么這個字串沒有轉換為整數?
