Heim > Backend-Entwicklung > C++ > Wie können Friend-Operatorfunktionen implizite Typkonvertierungen in C-Vorlagen ermöglichen?

Wie können Friend-Operatorfunktionen implizite Typkonvertierungen in C-Vorlagen ermöglichen?

Patricia Arquette
Freigeben: 2024-11-17 04:29:03
Original
617 Leute haben es durchsucht

How Can Friend Operator Functions Enable Implicit Type Conversions in C   Templates?

Implizite Typkonvertierung in Vorlagen mit befreundeten Operatorfunktionen

Um die implizite Typkonvertierung mit Vorlagen zu nutzen, ist eine häufig verwendete Technik die Definition von a Nicht-Mitglieds-Friend-Funktion innerhalb der Definition der Vorlagenklasse.

In C werden Vorlagenfunktionen erst instanziiert, wenn sie aufgerufen werden mit bestimmten Typen. Während der Überladungsauflösung leitet der Compiler die Typen der Vorlagenparameter ab und eliminiert alle Vorlagen, die nicht genau mit den Argumenttypen übereinstimmen, mit Ausnahme impliziter Konvertierungen.

Die Lösung liegt in der Verwendung einer in der Vorlage definierten Friend-Operator-Funktion Klassendefinition. Für jede Vorlageninstanziierung generiert der Compiler eine kostenlose Nicht-Vorlagenfunktion mit einer Signatur, die den ersetzten Typen entspricht.

Bedenken Sie beispielsweise Folgendes:

template <typename T>
class test {
    friend test operator+(test const &, test const &) {
        return test();
    }
};
Nach dem Login kopieren

Wenn die Vorlage mit int instanziiert wird, Der Compiler erstellt eine Nicht-Vorlagenfunktion:

test<int> operator+(test<int> const &, test<int> const &) {
    return test<int>();
}
Nach dem Login kopieren

Diese Funktion, die über eine argumentabhängige Suche verfügbar ist, führt implizite Konvertierungen durch seine Argumente. Dies liegt daran, dass es außerhalb der Vorlagenklasse definiert ist und bei der Überladungsauflösung keine genauen Typübereinstimmungen erfordert.

Somit werden implizite Typkonvertierungen möglich, wenn der Operator für Objekte vom Typ test aufgerufen wird, was Ausdrücke ermöglicht wie:

A<3> a(4);
A<3> b = a + 5;
A<3> c = 5 + a;
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie können Friend-Operatorfunktionen implizite Typkonvertierungen in C-Vorlagen ermöglichen?. 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