Twitter und Facebook-Anbindung
X
Tweet Follow @twitterapi
!!! Anbindung an twitter und facebook öffnen !!!

Wenn Ihnen mein Online-Buch gefällt,
dann bedanken Sie sich doch mit einer kleinen Spende...

24.1 Vorteile

24.1 Vorteile

Wie bereits erwähnt, kann man sich noch mehr Arbeit ersparen, weil man flexibler ist, aber was meine ich damit? Nun, stellen Sie sich eine Liste vor. Dort haben Sie in der Regel nur die Möglichkeit, Elemente eines Typs aufzunehmen wie z.B. Integer. Falls Sie irgendwo im Programm (oder auch in einem neuen Projekt), solch eine Liste wieder brauchen, allerdings mit Strings, dann haben Sie ein Problem. Normalerweise müsste man den Quelltext der Liste kopieren und auf den neuen Datentyp anzupassen. Mal abgesehen vom Arbeitsaufwand, könnten sich auch wieder diverse Tippfehler einschleichen und auf Dauer ist dies nicht praktikabel.

Ein Lösungsansatz wäre, sich eine Liste aus "void" Pointern zu bauen. Dann könnte man über entsprechendes Typumwandlungen, die gewünschten Elemente in die Liste ein - und aushängen. Aber auch das hat viele Nachteile. Da nun jeder erdenklicher Datentyp in der Liste stehen kann, weiß man später beim Zugriff auf die Liste nicht mehr, was man zurück bekommt. Ein Zurückcasten kann dann also arg in die Hose gehen. Zudem ist man gezwungen Pointer zu benutzen und hat dadurch unnötige Indirektionen.

Ein weiterer Ansatz wäre, sich für alle Arten von Typen eine Klasse zu bauen und jene dann von einer abstrakten Basisklasse erben zu lassen. Tatsächlich wird dies sogar in manchen Sprachen wie Delphi oder Java gemacht. Dort gibt es eine Klasse "TObject" bzw. "object", von der jede Klasse erbt. Aber auch das würde Sie nur bedingt zum Ziel bringen, da man bei einem Zurückcasten, im Zweifelsfall wieder nicht genau weiß, um was es sich für ein Datentyp handelt. Hinzu kommt, dass man dann oftmals virtuelle Methoden braucht und was das für Folgen hat, habe ich bereits ausführlich diskutiert.

Wie können Sie sich also aus diesem Schlamassel heraus winden? Die Antwort sind Templates. Der Nachteil für das ständige anpassen einer funktionierenden Liste auf einen neuen Datentyp, war doch der Schreibaufwand. Genau da kommen die Ihnen Templates entgegen, weil sie ganz grob gesagt, eine Art abstrakte Kopiervorlage sind. Man entwickelt es ganz allgemein und kann es später auf mehrere unterschiedliche Fälle anwenden.

Nun kann man diesen Mechanismus aber nicht nur für Klassen benutzen, sondern auch für Funktionen. Angenommen Sie möchten eine Funktion bauen, die zwei Werte miteinander verrechnet und einen ganz speziellen Ergebnistyp liefern soll. Normalerweise müsste man also wieder für jeden erdenklichen Datentyp eine separate Funktion bauen, die sich gegenseitig überladen (was schon einmal nicht ohne weiteres geht, falls sich die Parameter der Funktion nicht unterscheiden). Auch hier kann über ein Template eine allgemeine "Kopiervorlage" definiert werden. Wie das alles funktioniert, werde ich noch zeigen.

Ich hatte Ihnen zu Beginn mal die Defines gezeigt. Mit Ihnen konnte man auch Quelltextbausteine erzeugen. Der große Nachteil an ihnen ist, dass man im Debug-Modus nicht sieht, was sich hinter einem Define verbirgt und wenn man sogar eine ganze Funktion so implementiert hat, kann man jene nicht debuggen. Templates leisten genau dies und sie können sogar noch weit mehr Aufgabengebiete abdecken. Ab jetzt sollten Sie also vermindert mit Defines arbeiten.

Zum Seitenanfang
Zum Inhaltsverzeichnis

© Copyright by Thomas Weiß, 2009 - 2012