Heim > Backend-Entwicklung > C++ > Warum schlägt die explizite Spezialisierung von Vorlagenfunktionen in Vorlagenklassen ohne Namespace-Bereich in C fehl?

Warum schlägt die explizite Spezialisierung von Vorlagenfunktionen in Vorlagenklassen ohne Namespace-Bereich in C fehl?

Linda Hamilton
Freigeben: 2024-11-30 21:37:12
Original
149 Leute haben es durchsucht

Why Does Explicit Specialization of Template Functions Fail in Non-Namespace-Scoped Template Classes in C  ?

Explizite Spezialisierung von Template-Funktionen in Template-Klassen in C

Fehler:

Entwickler versuchen Das explizite Spezialisieren von Vorlagenfunktionen innerhalb von Vorlagenklassen ohne Namespacebereich kann zu Kompilierungsfehlern in GCC führen. Der folgende Code weist ein solches Problem auf:

struct tag {};

template< typename T >
struct C
{   
    template< typename Tag >
    void f( T );                 // declaration only

    template<>
    inline void f< tag >( T ) {} // ERROR: explicit specialization in
};                               // non-namespace scope 'structC<T>'
Nach dem Login kopieren

Lösung:

Explizite Spezialisierung von Mitgliedsfunktionen wird in nicht namespacebezogenen Vorlagenklassen nicht unterstützt. Erwägen Sie stattdessen die Weiterleitung von Aufrufen an eine Mitgliedsfunktion eines teilweise spezialisierten Vermittlertyps:

template<class T, class Tag>
struct helper {
    static void f(T);   
};

template<class T>
struct helper<T, tag1> {
    static void f(T) {}
};

template<class T>
struct C {
    // ...
    template<class Tag>
    void foo(T t) {
        helper<T, Tag>::f(t);
    }
};
Nach dem Login kopieren

Dieser Ansatz nutzt eine teilweise Vorlagenspezialisierung, um das gewünschte Verhalten zu erreichen und gleichzeitig die syntaktischen Anforderungen von GCC einzuhalten.

Das obige ist der detaillierte Inhalt vonWarum schlägt die explizite Spezialisierung von Vorlagenfunktionen in Vorlagenklassen ohne Namespace-Bereich in C fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage