Heim >Backend-Entwicklung >C++ >Wie verbessern C 17-Vorlagenableitungsleitfäden die Ableitung von Vorlagenargumenten?
Einführung
C 17 führte eine leistungsstarke Funktion namens „Leitfäden zum Vorlagenabzug“ ein. ", die eine entscheidende Rolle bei der Verbesserung der Ableitung von Vorlagenargumenten für Konstrukteure spielen. Diese Funktion befasst sich mit der Herausforderung, beim Erstellen von Objekten mit Vorlagen die entsprechenden Vorlagenparameter abzuleiten.
Was sind Vorlagenableitungsleitfäden?
Vorlagenableitungsleitfäden sind mit einer Vorlage verknüpfte Muster Klasse. Sie unterstützen den Compiler bei der Übersetzung der an einen Konstruktor übergebenen Argumente in die entsprechenden Vorlagenparameter. Im Wesentlichen legen sie Regeln für den Compiler fest, um basierend auf den Argumenten des Konstruktors zu bestimmen, welche Vorlagenspezialisierung instanziiert werden soll.
Warum und wann Vorlagenabzugsleitfäden verwendet werden sollten
Vorlagenabzugsleitfäden sind erforderlich, wenn der Vorlagenparameter nicht direkt aus dem Typ der Konstruktorargumente abgeleitet werden kann. Diese Situation entsteht, wenn das Vorlagenargument nicht vom Typ eines einzelnen Arguments abgeleitet ist. Betrachten Sie beispielsweise den Fall des Konstruktors von std::vector, der ein Iteratorpaar akzeptiert:
template<typename Iterator> void func(Iterator first, Iterator last) { vector v(first, last); }
In diesem Beispiel kann der T-Vorlagenparameter des Vektortyps nicht direkt aus den Iteratorargumenten abgeleitet werden. Es muss ein Abzugsleitfaden verwendet werden, um den Compiler darüber zu informieren, dass die richtige Spezialisierung vector
Vorlagenabzugsleitfäden deklarieren
Vorlagen-Abzugsleitfäden werden wie folgt deklariert Syntax:
template class_name(constructor_args) -> template_args;
Beispiel
Betrachten Sie das Beispiel des Ableitungsleitfadens von std::vector:
template<typename Iterator> vector(Iterator b, Iterator e) -> vector<typename std::iterator_traits<Iterator>::value_type>;
Dieser Leitfaden weist den Compiler dazu an Beim Erstellen eines std::vector mithilfe des Konstruktormusters (Iteratorpaar) sollte das Vorlagenargument T abgeleitet werden als typename std::iterator_traits
Leitfäden zur Aggregatinitialisierung und Vorlagenableitung
Interessanterweise können Leitfäden zur Vorlagenableitung auch mit Aggregaten und der Aggregatinitialisierung verwendet werden :
template<typename T> struct Thingy { T t; }; Thingy(const char *) -> Thingy<std::string>; Thingy thing{"A String"}; //thing.t is a `std::string`.
In diesem Beispiel wird ein Vorlagen-Abzugsleitfaden verwendet um den Vorlagenparameter T von Thingy basierend auf dem Typ des an den Aggregatkonstruktor übergebenen String-Literals abzuleiten.
Schlussfolgerung
Vorlagenableitungsleitfäden sind ein leistungsstarkes Tool zum Aktivieren der Typinferenz beim Erstellen von Vorlagenobjekten. Durch die explizite Definition, wie Konstruktorargumente in Vorlagenparameter übersetzt werden, können Programmierer den Prozess der Vorlageninstanziierung erheblich vereinfachen und die Lesbarkeit des Codes verbessern.
Das obige ist der detaillierte Inhalt vonWie verbessern C 17-Vorlagenableitungsleitfäden die Ableitung von Vorlagenargumenten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!