30.06.2013 Aufrufe

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

16.5 Str<strong>in</strong>gs 519<br />

kann man davon ausgehen, dass sehr viel Kreativität vonnöten ist, die entsprechenden<br />

Manipulationen performant genug zu implementieren, dass sie<br />

nicht zur Laufzeitkatastrophe werden.<br />

• Verschiedene Systeme unterstützen verschiedenste Zeichensätze. Es s<strong>in</strong>d<br />

daher bei plattformübergreifenden Programmen auch verschiedenste Umwandlungsverfahren<br />

zu implementieren. Wenn man im gesamten Programm<br />

verstreute Low-Level char * zusammensuchen müsste, um die Umwandlungen<br />

korrekt e<strong>in</strong>zubauen, würde dies zum undurchführbaren Unterfangen.<br />

• E<strong>in</strong> Character, der <strong>in</strong> e<strong>in</strong>em Str<strong>in</strong>g verwendet wird, muss nicht unbed<strong>in</strong>gt<br />

e<strong>in</strong> char se<strong>in</strong>! Leider ist genau diese Tatsache vielen Entwicklern nicht<br />

bewusst, aber aus guten Gründen werden immer häufiger Zeichensätze<br />

verwendet, die 16 oder sogar 32 Bit Characters voraussetzen (z.B. Unicode).<br />

Was es bedeutet, alle Vorkommen von char * (und auch char,<br />

die von gewissen Manipulationsrout<strong>in</strong>en geliefert werden) <strong>in</strong> e<strong>in</strong>em großen<br />

Programm zu f<strong>in</strong>den und entsprechend zu ändern, kann man sich leicht<br />

vorstellen.<br />

Neben diesen Betrachtungen gibt es noch andere, wie z.B. Mehrsprachigkeit,<br />

die <strong>in</strong> vielen Programmen e<strong>in</strong>e Rolle spielen. Die Anforderungen an Str<strong>in</strong>gs<br />

s<strong>in</strong>d auf jeden Fall deutlich zu sehen:<br />

• E<strong>in</strong> Str<strong>in</strong>g muss unbed<strong>in</strong>gt <strong>in</strong> e<strong>in</strong>e Klasse gekapselt werden. Die Verwendung<br />

von Low-Level char * <strong>in</strong> Programmen ist absolut unzulässig.<br />

• E<strong>in</strong>e Str<strong>in</strong>g-Klasse darf sich ke<strong>in</strong>esfalls auf die Verwendung von char für<br />

e<strong>in</strong>en Character kaprizieren. Auch die implementierten Methoden zur Manipulation<br />

müssen entsprechend allgeme<strong>in</strong> geschrieben se<strong>in</strong>, dass sie für<br />

verschiedenste Datentypen zu brauchen s<strong>in</strong>d.<br />

• Genauso wenig wie die Str<strong>in</strong>g-Klasse selbst dürfen sich spezielle (externe)<br />

Funktionen zur Manipulation auf char für e<strong>in</strong>en Character beschränken.<br />

• Da es immer noch viele althergebrachte Klassen, Funktionen und Methoden<br />

gibt, die aus historischen Gründen <strong>in</strong> gewissen Situationen mit char *<br />

arbeiten, muss e<strong>in</strong>e Str<strong>in</strong>g-Klasse e<strong>in</strong>e entsprechende Typumwandlung unterstützen,<br />

wenn diese beim verwendeten Zeichensatz überhaupt s<strong>in</strong>nvoll<br />

ist. Fehlverwendung (z.B. Cast auf char *, obwohl der Basis Character<br />

des Str<strong>in</strong>gs e<strong>in</strong> unsigned short ist) muss zu e<strong>in</strong>em Compilerfehler führen.<br />

Dass all diese Anforderungen (und noch e<strong>in</strong>ige zusätzliche, die man sich<br />

überlegen kann) geradezu nach der Implementation e<strong>in</strong>es Str<strong>in</strong>gs als Template<br />

schreien, ist sonnenklar. Genau das wurde auch <strong>in</strong> der STL gemacht<br />

und steht <strong>in</strong> Form des basic_str<strong>in</strong>g Templates zur Verfügung. Das Template<br />

basic_str<strong>in</strong>g ist mit dem Datentyp parametrisierbar, der für e<strong>in</strong>en<br />

Character verwendet werden soll. Um e<strong>in</strong> Maximum an Performance zu erreichen<br />

und um I/O Operationen mit Str<strong>in</strong>gs e<strong>in</strong>fach und effizient gestalten<br />

zu können, setzt basic_str<strong>in</strong>g noch voraus, dass der Typ, der für e<strong>in</strong>en

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!