Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

C++ Grundkurs

Was bedeutet Template-Spezialisierung?

Testen Sie unsere 2019 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Die Spezialisierung von Templates dient dazu, spezielle Varianten eines Klassen- oder Funktions-Template abhängig von deren Template-Parametern zu definieren.
03:52

Transkript

In dieser Lektion möchte ich Ihnen Template-Spezialsierungen vorstellen. Templates beschreiben bekanntermaßen das Verhalten von Familien, von Klassen und Funktionen. Oft ist es auch notwendig, dass besondere Typen oder Nichttypen besonders behandelt werden. Dazu können Templates vollständig, im Falle von Klassen auch teilweise spezialisiert werden. Die Methoden und Attribute von Spezialisierungen müssen nicht identisch sein. Das trifft natürlich nur auf Klassen-Templates zu, weil Funktions-Templates keine Methoden und Attribute besitzen können. Neben den allgemeinen oder primären Templates können auch partielle und vollständige spezialisierte Templates koexistieren. Die große Frage besteht natürlich jetzt, welche Templates zieht der Compiler vor. Der Compiler zieht vollständige den partiellen, partiellen den primären Templates vor. Er geht also vom Speziellen zum Allgemeinen. Das zeige ich Ihnen jetzt noch in der Anwendung. Hier die Klasse Account. Die wird initialisiert mit einem Double-Wert. Hat einen Kontostand, den ich abfragen kann. Das war es eigentlich schon mit der Klasse Account. Jetzt zeige ich Ihnen drei Klassen-Templates, das primäre, das partielle und das vollspezialisierte Klassen-Template. Das primäre sehen Sie hier. Class Matrix hat drei Template-Parameter T, Line und Column. T ist ein Typparameter. Line und Column sind sogenannte Nichttyp-Parameter. Jetzt spezialisiere ich es. Sie können sich das eigentlich vorstellen wie einen möglichen Raum von Argumenten und den schränken Sie jetzt ein. Ich schränke ihn dadurch ein, dass ich sage, Line und Column soll meine Spezialisierung jeweils 3 sein. Das heißt, das Einzige, was an diesem Klassen-Template noch frei ist, ist der Typ-Parameter. Hier kommt die volle Spezialisierung. Eine volle Spezialisierung ist im Prinzip das Gleiche wie eine Klasse. Die volle Spezialisierung zeichnet sich dadurch aus, dass ich Typ auf int setze, die Line und die Column jeweils auf 3. Nun noch ein Funktions-Template. Das Funktions-Template in der allgemeinen und in der voll spezialisierten Form. Funktions-Templates können ja nicht teilweise spezialisiert werden oder partiell spezialisiert werden. Da gibt es nur die allgemeine und die vollständig spezialisierte Form. Die allgemeinen kennen Sie auch. Das Funktions-Template isSmaller. Erwartet zwei Argumente, first und second vom gleichen Typ T und vergleicht die. Jetzt will ich aber meine Account-Objekte auch vergleichen mit diesen Funktions-Template. Wie mache ich das? Indem ich das Funktions-Template vollständig für Account spezialisiere. Dementsprechend sind die Objekte hier auch vom Typ Account. Wie mache ich da tatsächlich einen Vergleich? Indem ich von jedem dieser Objekte getBalance aufrufe. fir.getBalance, sec.getBalance. Nun zeige ich Ihnen das Ganze in der Anwendung. Zuerst das Klassen-Template. Durch double, 3, 4 wird das primäre Template verwendet. Wenn ich hochschaue hier, passt das hier nicht, passt das hier nicht, also kann nur das passen. Durch double, 3, 3 wird die partielle Spezialisierung angewandt. Weil 3, 3, das passt hier und das T wird zum Double. Durch int, 3, 3, wird die vollständige Spezialisierung angewandt, weil das genau darauf passt. Nun noch das Funktions-Template isSmaller von 3, 4. Das passt natürlich nur auf allgemeine Funktions-Template. Aber isSmaller von zwei Account-Objekten, von Account mit 100, Account mit 200, passt natürlich auf die vollständige Spezialisierung hier. Dann habe ich sie noch angewandt und Sie sehen, isSmaller von 3, 4 ergibt true. Passt auch. isSmaller von Account von 100 und Account von 200 ergibt auch true, weil ich eben in diesem Fall die tatsächlichen Kontostände 100 und 200 vergleiche. In dieser Lektion habe ich Ihnen die Spezialisierung von Templates vorgestellt. Für Klassen-Templates können Sie Templates allgemein schreiben, partial spezialisieren und vollständig spezialisieren. Für Funktions-Templates gibt es nur die allgemeine Form und die vollständige Spezialisierung.

C++ Grundkurs

Steigen Sie in die mächtige Programmiersprache C++ ein und lernen Sie dabei alle wichtigen Funktionen mit Anwendungsbeispielen kennen.

8 Std. 14 min (147 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!