Heim >Backend-Entwicklung >C++ >Können Mitgliedsfunktionen teilweise auf Klassenvorlagen spezialisiert werden?

Können Mitgliedsfunktionen teilweise auf Klassenvorlagen spezialisiert werden?

Barbara Streisand
Barbara StreisandOriginal
2024-11-04 18:48:02780Durchsuche

Can Member Functions Be Partially Specialized in Class Templates?

Member-Funktionsspezialisierung in Klassenvorlagen

Eine teilweise Spezialisierung, die die Änderung bestimmter Mitglieder in einer Vorlagenklasse ermöglicht, wird für Mitglieder nicht unterstützt Funktionen. Dies bedeutet, dass Code wie der folgende nicht kompiliert werden kann:

<code class="cpp">template <typename T, bool B>
struct X
{
    void Specialized();
};

template <typename T>
void X<T, true>::Specialized()
{
    ...
}

template <typename T>
void X<T, false>::Specialized()
{
    ...
}</code>

Alternative Ansätze

  • Explizite Spezialisierung: Sie können explizit spezialisieren eine Mitgliedsfunktion, indem alle Vorlagenargumente bereitgestellt werden.
<code class="cpp">template <>
void X<int, true>::Specialized()
{
    ...
}</code>
  • Überladene Funktionen:Führen Sie überladene Funktionen ein, die Zugriff auf Mitgliedsvariablen, Funktionen und Objekte der Klasse haben .
<code class="cpp">template <typename T, bool B>
struct X
{
    template <bool B>
    static void Specialized(int);
};

template <typename T>
inline void X<T, true>::Specialized(int)
{
    ...
}

template <typename T>
inline void X<T, false>::Specialized(int)
{
    ...
}</code>
  • Separate Klassenvorlage:Verweisen Sie auf eine separate Klassenvorlage, um die Spezialisierung zu verwalten.
<code class="cpp">template <typename T, bool B>
struct SpecializedImpl
{
    static void call()
    {
        ...
    }
};

template <typename T, bool B>
struct X
{
    void Specialized()
    {
        SpecializedImpl<T, B>::call();
    }
};</code>

Das obige ist der detaillierte Inhalt vonKönnen Mitgliedsfunktionen teilweise auf Klassenvorlagen spezialisiert werden?. 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