Werbung

Die Verwendung von templates in C++

Unsere Klasse IntArray dient als gute Alternative zu integrierten array von ganzen zahlen. Aber im Leben kann es erforderlich sein Arrays für die verschiedenen Datentypen. Sie können davon ausgehen, dass der einzige Unterschied die array-Elemente vom Typ double von unserem ist die Art der Daten in den anzeigen, der Rest der Code entspricht wörtlich.
Для решения данной проблемы в С++ введен механизм Vorlagen. В объявлениях классов и функций допускается использование parametrisierte Typen. Arten-Parameter ersetzt werden bei der Kompilierung diesen Typen, integrierten oder bestimmte Benutzer. Wir können eine Vorlage erstellen, in der Array-Klasse, ersetzen Sie in der Klasse IntArray Typ der Elemente int auf verallgemeinerte Typ-Parameter. Позже мы конкретизируем Arten-Einstellungen, setzt man stattdessen echte Typen int, double und string. Im Ergebnis wird die Möglichkeit, diese Konkretisierung so, als ob wir tatsächlich identifiziert drei verschiedene Klassen für diese drei Arten von Daten.
Das ist, wie das Aussehen kann, Vorlage-Klasse Array:

Das Schlüsselwort template sagt, was wird die Vorlage, deren Parameter sind in eckige Klammern (<>). In unserem Fall gibt es nur eine Option elemType; das Schlüsselwort class vor seinem Namen meldet, dass diese Option ist eine Art von.
Bei der Konkretisierung der Klasse-Vorlage Array-Parameter elemType durch die echte Art bei jeder Verwendung, wie im Beispiel gezeigt:

Hier werden drei Instanz der Klasse Array:

Was macht der Compiler, Begegnung mit Anzeige? Fügt Text in die Vorlage ein Array, ersetzt die Option elemType auf die Art, das ist in jedem Fall. Daher, anzeigen der Mitglieder erwerben im ersten Fall dieser Art:

Beachten Sie, dass es in der Genauigkeit entspricht der Definition eines Arrays IntArray.
Für die verbleibenden beiden Fällen erhalten wir den folgenden Code:

Was passiert mit den Funktionen-Mitglieder? In Ihnen ist auch der Typ-Parameter elemType durch die echte Art, aber der Compiler nicht konkretisiert die Funktionen, die werden nicht in irgendeiner Stelle im Programm.
Beim ausführen das Programm dieses Beispiel zeigt das folgende Ergebnis:

Template-Engine kann in die geerbten Klassen. Hier ist, wie sieht die Definition einer Klasse Vorlage ArrayRC:

Die Substitution der realen Parameter statt Typ-Parameter elemType geschieht wie in der Basis, und in abgeleiteten Klassen.

Die Definition der verhält sich genau so, wie die Definition IntArrayRC aus dem vorherigen Abschnitt. Ändern Sie ein Beispiel für die Verwendung der vorherigen Abschnitt.

Vor allem, um оператор // Funktion swap() auch sollte die Vorlage war ungültig, wir brauchen vorstellen Funktion swap() als Vorlage.

Bei jedem Aufruf von swap() erzeugt die passende Konkretisierung, das hängt von der Art des Arrays. So sieht das Programm, das Vorlagen Array und ArrayRC:

Werbung