Heim  >  Artikel  >  Backend-Entwicklung  >  Kann die Vorlagenableitung basierend auf dem Rückgabetyp einer Funktion in C funktionieren?

Kann die Vorlagenableitung basierend auf dem Rückgabetyp einer Funktion in C funktionieren?

Susan Sarandon
Susan SarandonOriginal
2024-11-06 05:35:02692Durchsuche

Can Template Deduction Work Based on a Function's Return Type in C  ?

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!

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