Martin
Martin

Reputation: 9369

How to specialize a given template for a template

Is it possible to specialize this template for any basic_string's?

template<class T> struct X {};

Since basic_string is a template itself, I know this would be a solution:

template <template <class, class, class> class T> struct X {}; template <> struct X<basic_string> {};

However, I would like to know if the language allows to preserve the first template definition, by specializing it somehow for basic_string's only.

Upvotes: 0

Views: 86

Answers (1)

Kerrek SB
Kerrek SB

Reputation: 477040

Yes:

#include <string>

template <typename> struct X;

template <typename TChar, typename TTraits, typename TAlloc>
struct X<std::basic_string<TChar, TTraits, TAlloc>>
{
    // ...
};

Your primary template takes one type parameter, so every specialization must supply one type parameter for X, one way or another.

Upvotes: 3

Related Questions