Heim  >  Artikel  >  Backend-Entwicklung  >  Kann die Vorlagenableitung Typargumente ausschließlich auf der Grundlage des Funktionsrückgabetyps in C ableiten?

Kann die Vorlagenableitung Typargumente ausschließlich auf der Grundlage des Funktionsrückgabetyps in C ableiten?

Linda Hamilton
Linda HamiltonOriginal
2024-11-06 06:25:02483Durchsuche

Can Template Deduction Infer Type Arguments Based Solely on Function Return Type in C  ?

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!

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