Класс:
template<typename C, typename T>
class A
{
template <typename U>
class Nested{};
Nested<T> n;
};
И я хочу специализироваться Nested
. Вот что я пробовал:
template<typename C, typename T>
class A
{
template <typename U>
class Nested{};
template <>
class Nested<int>{}; // by my logic this should work by I have a compilation error "explicit specialization in non-namespace scope 'class A<C, T>'"
Nested<T> n;
};
Моя следующая попытка:
template<typename C, typename T>
class A
{
template <typename U>
class Nested{};
Nested<T> n;
};
template<>
A<>::Nested<int>{}; // What is the correct syntax to do it here? Now I have an error "wrong number of template arguments (0, should be 2)"
Здесь, в stackoverflow, я нашел решение:
template<typename C, typename T>
class A
{
template <typename U, bool Dummy = true>
class Nested{}; // why need of this Dummy??
template <bool Dummy>
class Nested<int, Dummy>{}; // why need to provide an argument??
Nested<T> n;
};
Это прекрасно работает, но я не могу понять, как это сделать. Почему необходимо предоставить аргумент шаблона шаблона? Почему я не могу использовать сырую специализацию template<> class Nested<int, true>{}
или template<> class Nested<int>{}
?