A-Klasse:Verschachtelte Klassen-Template Spezialisierung
template<typename C, typename T>
class A
{
template <typename U>
class Nested{};
Nested<T> n;
};
Und ich will Nested
spezialisieren. Hier ist, was ich versucht:
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;
};
Mein nächster Versuch:
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)"
hier auf Stackoverflow ich eine Lösung gefunden:
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;
};
Es funktioniert perfekt, aber ich kann nicht verstehen, wie. Warum ein Dummy-Template-Argument angeben? Warum kann ich die rohe Spezialisierung template<> class Nested<int, true>{}
oder template<> class Nested<int>{}
nicht verwenden?
Ja, aber es läuft nicht auf gcc und clang. Loos wie Microsoft folgt nicht dem Standard. Oder vielleicht gibt es einen Compiler-Schalter. – nikitablack