A sınıfı:İçiçe sınıf şablonu uzmanlık
template<typename C, typename T>
class A
{
template <typename U>
class Nested{};
Nested<T> n;
};
Ve Nested
uzmanlaşmak istiyorum. Denedim İşte Ne:
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;
};
Bir sonraki girişimi:
ben bir çözüm buldum stackoverflow üzerinde İştetemplate<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)"
:
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;
};
Mükemmel çalışıyor, ama nasıl anlayamıyorum. Neden kukla şablon argümanı sunmalı? Neden ham uzmanlık alanı template<> class Nested<int, true>{}
veya template<> class Nested<int>{}
kullanamıyorum?
Evet, ancak gcc ve clang'da çalışmaz. Microsoft, standardı izlemiyor gibi görünüyor. Ya da belki bir derleyici anahtarı vardır. – nikitablack