Heim >Backend-Entwicklung >C++ >Wie kann man eine Vorlagenfunktion innerhalb einer C-Vorlagenklasse explizit explizit spezialisieren?

Wie kann man eine Vorlagenfunktion innerhalb einer C-Vorlagenklasse explizit explizit spezialisieren?

Barbara Streisand
Barbara StreisandOriginal
2024-12-05 18:11:111050Durchsuche

How to Correctly Explicitly Specialize a Template Function within a C   Template Class?

Explizite Spezialisierung der Template-Funktion in der Template-Klasse in C

In C kann es bei der Arbeit mit Template-Klassen und -Funktionen erforderlich sein spezialisieren Sie explizit eine Vorlagenfunktion innerhalb einer Vorlagenklasse. Allerdings kann es schwierig sein, hierfür die richtige Syntax zu finden.

Bedenken Sie den folgenden Code:

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
};

Dieser Code, der in Visual C 2008 erfolgreich kompiliert werden kann, in GCC 4.2 jedoch fehlschlägt, versucht dies Spezialisieren Sie die f-Funktion explizit für den Tag-Typ innerhalb der C-Vorlagenklasse. Der Compilerfehler weist darauf hin, dass eine explizite Spezialisierung in einem Nicht-Namespace-Bereich innerhalb der Vorlagenklasse nicht zulässig ist.

Der richtige Weg, eine Vorlagenfunktion innerhalb einer Vorlagenklasse explizit zu spezialisieren, besteht darin, Aufrufe an eine Mitgliedsfunktion von a weiterzuleiten teilweise spezialisierter Typ. Dies kann mithilfe einer Hilfsklasse erfolgen:

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);
    }
};

In diesem Code ist „Helper“ eine Vorlagenklasse mit zwei Vorlagenparametern: T (der Typ des Objekts, an dem gearbeitet wird) und Tag (das Spezialisierungs-Tag). . Für die tag1-Spezialisierung ist eine teilweise spezialisierte Version des Helfers definiert, die die Implementierung für die f-Funktion bereitstellt. Die C-Vorlagenklasse verwendet dann eine Mitgliedsfunktion foo, um Aufrufe basierend auf dem angegebenen Tag an die entsprechende Hilfsfunktion::f zu delegieren.

Das obige ist der detaillierte Inhalt vonWie kann man eine Vorlagenfunktion innerhalb einer C-Vorlagenklasse explizit explizit spezialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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