Heim > Backend-Entwicklung > C++ > Wie kann man Template-Funktionen innerhalb von Template-Klassen in C explizit explizit spezialisieren?

Wie kann man Template-Funktionen innerhalb von Template-Klassen in C explizit explizit spezialisieren?

Susan Sarandon
Freigeben: 2024-11-26 16:59:09
Original
465 Leute haben es durchsucht

How to Correctly Explicitly Specialize Template Functions within Template Classes in C  ?

Explizite Spezialisierung von Template-Funktionen in Template-Klassen: Syntax-Rätsel in C

Der angegebene Codeausschnitt veranschaulicht ein Programmierrätsel, das beim Versuch auftritt spezialisieren Sie explizit eine Vorlagenfunktion innerhalb einer Vorlagenklasse. In Microsoft Visual C 2008 (VC9) wird der Code erfolgreich kompiliert; Beim Kompilieren mit GCC 4.2 auf einem Mac tritt jedoch beim gleichen Code ein Fehler auf.

GCC erfordert die Deklaration expliziter Spezialisierungen außerhalb der Klasse, die korrekte Syntax hierfür ist jedoch unklar. Der anfängliche Versuch, die explizite Spezialisierung außerhalb der Klasse zu platzieren, wie unten gezeigt, ist falsch:

template< typename T >
template<>
inline void C< T >::f< tag >( T ) {}
Nach dem Login kopieren

Der richtige Ansatz besteht darin, Aufrufe an eine Mitgliedsfunktion eines teilweise spezialisierten Typs weiterzuleiten. Hier ist der korrigierte Code:

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

Diese Änderung führt eine Hilfsstruktur ein, die die gewünschte Funktionalität bereitstellt und gleichzeitig die Syntaxanforderungen von GCC einhält. Durch die Trennung der expliziten Spezialisierung von der Klasse selbst wird der Code erfolgreich kompiliert und funktioniert wie erwartet.

Das obige ist der detaillierte Inhalt vonWie kann man Template-Funktionen innerhalb von Template-Klassen in C explizit explizit spezialisieren?. 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