Anzeigen: Object Pascal C++
Anzeigeeinstellungen

Verwenden von typsicheren generische Listen als Template

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu Klassen-Templates (Übersicht) - Index

Wenn Sie häufig nahezu identische Programmcodes schreiben, sollten Sie immer an die Verwendung von Templates denken. Bei der folgenden Klassendefinition (einer generischen Listenklasse) liegt das Problem darin, dass sie nicht typsicher ist.



 class GList
 {
  public:
    void insert( void * );
    void *peek();
     .
     .
     .
 };



Üblicherweise werden zur Lösung dieses Problems wiederholte Klassendefinitionen verwendet. Da für die Einfügungen keine Typüberprüfung erfolgt, haben Sie keine Möglichkeit zu erfahren, welches Ergebnis Sie erhalten. Sie können dieses Problem mit Hilfe einer umschließenden Klasse beheben:



 class FooList : public GList {
  public:
    void insert( Foo *f ) { GList::insert( f ); }
    Foo *peek() { return (Foo *)GList::peek(); }
       .
       .
       .
 };



Damit ist die Typsicherheit erreicht. insert kann nur Argumente vom Typ Zeiger-auf-Foo oder Objekt-abgeleitet-von-Foo haben. Dadurch speichert der zugrundeliegende Container nur Zeiger, die auf Objekte vom Typ Foo zeigen. Das bedeutet, dass die Typumwandlung (cast) in FooList::peek() immer sicher ist und Sie eine korrekte FooList erzeugt haben. Um dies nun auch für BarList, BazList usw. zu erreichen, benötigen Sie wiederholte getrennte Klassendefinitionen. Um das Problem der wiederholten Klassendefinitionen und der Typsicherheit zu lösen, können Sie wiederum Templates verwenden. Siehe Definition typsicherer generischer Listenklassen. Die C++ Standard Template Library (STL) beinhaltet zahlreiche typsichere Sammlungsklassen.

Durch die Verwendung von Templates können Sie beliebige typsichere Listen mit einer einfachen Deklaration erstellen. Dabei wird durch die Typkonvertierungen von der umschließenden Klasse kein Programmcode erzeugt, so dass während der Laufzeit aufgrund dieser Typsicherheit kein zusätzlicher Aufwand entsteht.

Meine Werkzeuge
In anderen Sprachen