Lektion 69:Default-Template-ArgumenteDies ist ein kleines Programm, das mit der neuen Klasse SortedArray das Gefängnisproblem löst:
An der Klasse SortedArray ist jetzt recht lästig, daß man immer einen Comparator angeben muß. Viele Klassen haben aber bereits gute Vergleichsoperatoren mitgeliefert. Nicht zuletzt trifft das auf den eingebauten Typ int zu. Um nicht für jeden Typen einen eigenen Comparator bauen zu müssen, der dann doch nur die Operatoren dieses Typs aufruft, ist es natürlich sinnvoll, hierzu wieder eine Template-Klasse zu erzeugen.
Aus der main-Funktion wird entsprechend
Beachten Sie, daß der Comparator, der übergeben wird, selbst wieder eine Template-Klasse ist. Mit Templates lassen sich wirklich komplizierte Sachen machen. Doch zunächst meldet der Compiler einen Fehler: ==> syntax error : missing ',' before identifier 's' Das liegt daran, daß Compiler die Zeichenfolge ">>" als operator>> versteht, und nicht wie beabsichtigt als zwei Template-Klammern. Beheben läßt sich das durch ein Leerzeichen.
Und schon funktioniert das Programm. Die Ausgabe kennen Sie ja bereits. Es müßten die Quadratzahlen bis 100 ausgegeben werden. Es ist recht unpraktisch, immer das umständliche
mit angeben zu müssen. Dafür gibt es eine Lösung. Man kann einen Default-Template-Parameter mitgeben. Schreiben Sie einfach am Anfang der Klasse SortedArray
Ab jetzt dürfen Sie immer, wenn Sie Lust haben, den zweiten Parameter weglassen. Wenn Sie ihn weglassen, dann setzt der Compiler automatisch den entsprechenden DefaultComparator ein. Wenn Sie aber einen besonderen Comparator verwenden möchten, dann schreiben Sie ihn einfach als zweiten Parameter hinein. Jetzt funktionieren also die beiden Versionen
und
gleichermaßen mit der selben Klasse. Falls Ihnen Fehler im Text auffallen oder Sie Verbesserungsvorschläge haben, dann schicken Sie mir bitte eine Mail. Ich werde mich dann sofort darum kümmern. [aktuelle Version] [inhalt] [index] [Fehlerkorrektur, Verbesserungsvorschlag] © Volkard Henkel <volkard@normannia.de>, last update: 08/25/00 |