Vorlagenabzug für eine Funktion basierend auf ihrem Rückgabetyp?
In C bietet der Vorlagenabzug eine bequeme Möglichkeit, Vorlagenargumente basierend auf dem zu bestimmen Argumente, die einem Funktionsaufruf bereitgestellt werden. Es gibt jedoch bestimmte Einschränkungen bei der Vorlagenableitung, z. B. die Unfähigkeit, Typargumente basierend auf dem Rückgabetyp einer Funktion abzuleiten.
Das Problem:
Das Original Die Frage soll die Notwendigkeit beseitigen, Typargumente beim Aufruf der Allocate()-Funktion im folgenden Code explizit anzugeben:
<code class="cpp">GCPtr<A> ptr1 = GC::Allocate(); GCPtr<B> ptr2 = GC::Allocate();</code>
Die Antwort:
Leider Vorlage Der Abzug kann nicht verwendet werden, um die Typargumente basierend auf dem Rückgabetyp abzuleiten. Stattdessen ist es umgekehrt: Der Rückgabetyp wird bestimmt, nachdem die Vorlagensignatur abgeglichen wurde.
Problemumgehung:
Um diese Einschränkung zu umgehen, muss Allocate( )-Funktion kann in eine Hilfsfunktion eingebunden werden, die das Typargument vor dem Aufrufer verbirgt:
<code class="cpp">// helper template <typename T> void Allocate(GCPtr<T>& p) { p = GC::Allocate<T>(); } int main() { GCPtr<A> p = 0; Allocate(p); }</code>
Dadurch kann der Aufrufer die Allocate()-Funktion verwenden, ohne das Typargument explizit anzugeben:
<code class="cpp">GCPtr<A> p = 0; Allocate(p);</code>
Zusätzlicher Hinweis:
C 11 führt das Schlüsselwort auto ein, das es dem Compiler ermöglicht, den Typ vom Initialisierer abzuleiten. Dies vereinfacht den Code weiter:
<code class="cpp">auto p = GC::Allocate<A>(); // p is of type GCPtr<A></code>
Das obige ist der detaillierte Inhalt vonKann die Vorlagenableitung basierend auf dem Rückgabetyp einer Funktion in C funktionieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!