Heim > Backend-Entwicklung > C++ > Hauptteil

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

Susan Sarandon
Freigeben: 2024-11-06 05:35:02
Original
691 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

Dadurch kann der Aufrufer die Allocate()-Funktion verwenden, ohne das Typargument explizit anzugeben:

<code class="cpp">GCPtr<A> p = 0;
Allocate(p);</code>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!