Partial specialization of a nested class

user2052436

How to partially specialize nested class without partially specializing the nesting class?

Implementation of class C is the same for all N.

Implementation of C::iterator is special for 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
{
    ...
};

I can partially specialize class C for N=1, but that's a lot of code duplication...

Öö Tiib

If you do not want to specialize whole class then just move the iterator out of class and make it template:

template<class T, int N>
class C_iterator
{
    ...
};

If needed make your specializations:

template<class T>
class C_iterator<T, 1>
{
    ...
};

Then use it in your class as iterator, if needed befriend it:

template<class T, int N>
class C
{
    using iterator = C_iterator<T, N>;
    friend iterator;
    ...
};

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

Partial specialization of nested template template class

Partial specialization of nested class on enum defined inside a template class

Weird nested class partial specialization results on both gcc and clang

Partial specialization for class method

Define partial specialization of Class

error: nested name specifier for declaration does not refer into a class, class template or class template partial specialization

Class template partial specialization equivalence

Template class partial specialization syntax

Using CRTP with partial class specialization?

Partial specialization for one method in the class

Class partial specialization inheriting methods

Nested class template specialization

something confusing about class template partial specialization & class member specialization

Specialization of inherited nested template class

Nested class template specialization issue

Partial class specialization using type traits

Partial class template specialization c++11

Class template specialization partial ordering and function synthesis

Class template argument deduction with partial specialization

`template <auto>` and partial class template specialization ordering

Is noexcept deduction allowed in class template partial specialization?

Partial specialization or instantiation of template class method

Unions as a partial specialization of a templated base class

Partial Template specialization definition outside of class definition

Clang partial class template specialization error

Partial specialization of a class template member function

C++ partial class template specialization over multiple parameters

Why is in-class partial specialization well-formed?

Variadic template partial specialization of a class to restrict type of template arguments