Heim >Backend-Entwicklung >C++ >Warum verursachen explizite Spezialisierungen außerhalb eines Namespace Kompilierungsfehler in C?
Explizites Spezialisierungsproblem im Nicht-Namespace-Bereich
Beim Kompilieren einer C-Klassenvorlage mit expliziter Spezialisierung außerhalb eines Namespace können einige Compiler wie g kann einen Fehler mit der Meldung „Explizite Spezialisierung im Nicht-Namespace-Bereich“ auslösen. Dieses Problem entsteht, weil explizite Spezialisierungen von Klassenvorlagen und ihren Mitgliedsfunktionen im Namensraum der Deklaration der Vorlage liegen sollten.
Der relevante C 03-Standard für explizite Spezialisierung (Abschnitt §14.7.3/2) gibt an, dass:
„Eine explizite Spezialisierung muss in dem Namespace deklariert werden, dessen Mitglied die Vorlage ist, oder, für Mitgliedsvorlagen, in dem Namespace, dessen Mitglied die umschließende Klasse oder die umschließende Klassenvorlage ist.“
Dies bedeutet, dass die explizite Spezialisierung der Verify()-Methode innerhalb des Namespace deklariert werden sollte, in dem die CConstraint-Klasse deklariert ist.
Darüber hinaus ist gemäß C 03, §14.7.3/3 eine explizite Spezialisierung von Mitgliedsfunktionen erforderlich explizite Spezialisierung der umschließenden Klasse. Um dieses Problem zu lösen, erwägen Sie die Weiterleitung der Verify()-Methode an eine explizite, potenziell spezialisierte freie Funktion innerhalb eines verschachtelten Namespace:
namespace detail { template <typename TL> void Verify(int, int[]) {} template <> void Verify<int>(int, int[]) {} } template<typename T> class CConstraint { // ... template <typename TL> void Verify(int position, int constraints[]) { detail::Verify<TL>(position, constraints); } };
Durch die Kapselung der expliziten Spezialisierung in einem verschachtelten Namespace erkennen Compiler, dass sie zu diesem gehört Der Namespace der Vorlage, wodurch der Fehler behoben wird.
Das obige ist der detaillierte Inhalt vonWarum verursachen explizite Spezialisierungen außerhalb eines Namespace Kompilierungsfehler in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!