Vorlagenabzug für Funktion basierend auf ihrem Rückgabetyp: Eine Erkundung
Einführung
In In C ermöglicht der Vorlagenabzug dem Compiler, die Typargumente abzuleiten, wenn er eine Vorlagenfunktion auf Grundlage der tatsächlich bereitgestellten Argumente aufruft. Dadurch kann der Code vereinfacht werden, da keine explizite Angabe von Typargumenten mehr erforderlich ist.
Das vorgeschlagene Szenario
Das gegebene Problem stellt ein Szenario dar, für das der Benutzer die Vorlagenableitung verwenden möchte Weisen Sie mithilfe einer generischen Allocate-Funktion Speicher für Objekte unterschiedlichen Typs zu. Konkret möchten sie den folgenden Code erreichen:
<code class="cpp">GCPtr<A> ptr1 = GC::Allocate(); GCPtr<B> ptr2 = GC::Allocate();</code>
Anstelle der aktuellen Implementierung:
<code class="cpp">GCPtr<A> ptr1 = GC::Allocate<A>(); GCPtr<B> ptr2 = GC::Allocate<B>();</code>
Vorlage der Allocate-Funktion
Die aktuelle Allocate-Funktionsvorlage ist wie folgt definiert:
<code class="cpp">template <typename T> static GCPtr<T> Allocate();</code>
Es ist jedoch nicht möglich, den gewünschten Vorlagenabzug allein mit dem Rückgabetyp zu erreichen. Der Typableitungsprozess basiert hauptsächlich auf den Argumenten der Funktion.
Eine Problemumgehung mit Hilfsfunktion
Um diese Einschränkung zu überwinden, kann eine Hilfsfunktion verwendet werden, um den expliziten Typ auszublenden Argument wie unten gezeigt:
<code class="cpp">// Helper function template <typename T> void Allocate( GCPtr<T>& p ) { p = GC::Allocate<T>(); } // Usage int main() { GCPtr<A> p = 0; Allocate(p); }</code>
Alternative Syntax mit C 11
C 11 führt eine Syntax ein, die es ermöglicht, die explizite Typdeklaration während der Vorlagenableitung zu verwerfen:
<code class="cpp">auto p = GC::Allocate<A>(); // p is of type GCPtr<A></code>
Fazit
Während es nicht möglich ist, sich ausschließlich auf die Vorlagenableitung über den Rückgabetyp zu verlassen, kann die Verwendung einer Hilfsfunktion oder der C 11-Syntax eine praktische Alternative zur Ausrichtung darstellen mit dem gewünschten Verhalten. Diese Techniken ermöglichen die Zuweisung verschiedener Objekttypen mit vereinfachter Syntax, wodurch die Notwendigkeit expliziter Typargumente verringert wird.
Das obige ist der detaillierte Inhalt vonKann die Vorlagenableitung Typargumente ausschließlich auf der Grundlage des Funktionsrückgabetyps in C ableiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!