Vorlagenabzug basierend auf dem Funktionsrückgabetyp in C
In C kann es wünschenswert sein, den Vorlagenabzug zu verwenden, um Code zu vereinfachen, der generisches instanziiert Funktionen basierend auf den Datentypen der Argumente der Funktion. Betrachten Sie das folgende Beispiel:
<code class="cpp">GCPtr<A> ptr1 = GC::Allocate(); GCPtr<B> ptr2 = GC::Allocate();</code>
Anstatt die generischen Typparameter explizit anzugeben, besteht das Ziel darin, diese Schlussfolgerung mithilfe des Rückgabetyps der Funktion GC::Allocate() zu erreichen. Allerdings erlaubt C keine Typableitung basierend auf dem Rückgabetyp.
<code class="cpp">class GC { public: template<typename T> static GCPtr<T> Allocate(); };</code>
Obwohl der Rückgabetyp generisch ist, erfordert der Compiler die explizite Angabe der Vorlagentypparameter und beim Instanziieren der Funktion GC::Allocate().
Um diese Einschränkung zu mildern, kann eine Hilfsfunktion eingeführt werden:
<code class="cpp">template <typename T> void Allocate(GCPtr<T>& p) { p = GC::Allocate<T>(); }</code>
Mit dieser Funktion kann das ursprüngliche Ziel wie folgt erreicht werden :
<code class="cpp">GCPtr<A> p; Allocate(p);</code>
Ob diese Syntax einen signifikanten Vorteil gegenüber der expliziten Typspezifikation bietet, ist subjektiv.
Hinweis:In C 11 ist es möglich, einen davon wegzulassen die Typdeklarationen mit dem Schlüsselwort auto:
<code class="cpp">auto p = GC::Allocate<A>(); // p is of type GCPtr<A></code>
Das obige ist der detaillierte Inhalt vonKann C Vorlagentypen aus Funktionsrückgabetypen ableiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!