 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Daniel Albuschat Guest
|
Posted: Fri Dec 12, 2003 7:20 pm Post subject: char_traits und ICCs basic_string Implementation |
|
|
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hallo,
Ich hatte vor einiger Zeit hier mal eine Beispielspezialisierung
von char_traits fuer long gepostet. Daraufhin wurde mir gesagt, dass
man Standardtemplates nicht mit eingebauten Typen spezialisieren duerfe.
Bei dem Versuch, eine char_traits Spezialisierung zu bauen, die
case insensitive (mit simpler Hilfe von std::toupper) ist (siehe
juengsten Thread "case insensitive string"), bin ich auf
eine Eigenart der basic_string Implementation von ICC gestossen.
Und zwar benutzt er anscheinend eine Implementation, die bis zu
_BUF_SIZE lange strings in einem statischen Array speichert, wenn
der string groesser wird, allerdings einen pointer auf eine dynamische
Speicherstelle verwendet. Dazu bedienen sie sich einer union, die so
aussieht:
| Quote: | union _Bxty
{ // storage for small buffer or pointer to larger one
_Elem _Buf[_BUF_SIZE];
_Elem *_Ptr;
} _Bx;
|
Heisst das nicht, dass die Spezialisierung von char_traits vollkommen
unmoeglich ist, da _Elem kein operator T und keinen
ctor haben, allerdings auch kein built-in Datentyp sein darf?
Irgendwie bin ich verwirrt.
cu,
~ Daniel Albuschat
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (GNU/Linux)
iD8DBQE/2hUUaWDp5fmJLkARAnsnAJ4hRo+/zY9zKwnTKaAnDivzcohDLgCeP133
8yienk4rulqSRs8uBG1eb+M=
=/QmZ
-----END PGP SIGNATURE-----
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Markus Schaaf Guest
|
Posted: Fri Dec 12, 2003 10:29 pm Post subject: Re: char_traits und ICCs basic_string Implementation |
|
|
"Daniel Albuschat" <daniel (AT) viming (DOT) de> schrieb:
| Quote: | Heisst das nicht, dass die Spezialisierung von char_traits vollkommen
unmoeglich ist, da _Elem kein operator T und keinen
ctor haben, allerdings auch kein built-in Datentyp sein darf?
|
»char_type« (und »int_type«) muß POD sein. Das steht gleich als Erstes
in der Library-Beschreibung (§21/1). Ein einfacher eigener Char-Typ
wäre also:
struct MyChar { char val; };
HTH
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Daniel Albuschat Guest
|
Posted: Sat Dec 13, 2003 12:07 pm Post subject: Re: char_traits und ICCs basic_string Implementation |
|
|
Markus Schaaf wrote:
| Quote: | "Daniel Albuschat" <daniel (AT) viming (DOT) de> schrieb:
»char_type« (und »int_type«) muß POD sein. Das steht gleich als Erstes
in der Library-Beschreibung (§21/1). Ein einfacher eigener Char-Typ
wäre also:
struct MyChar { char val; };
|
Das ist aber kein Char-Typ, weil er sich nicht wie ein char verhaelt.
z.B. geht MyChar c = 'a'; nicht. Und c == 'a' auch nicht, etc.
Da liegt ja mein Problem... fuer diese Dinge muesste man Operatoren
ueberladen, aber dann hat man kein POD mehr... sehr doof,
wie ich finde.
Kann ich denn sicher gehen, dass std::string den Char-Typen garnicht
benutzt, sondern alles auf char_traits auslagert? Dazu konnte ich im
Standard nichts finden...
Daniel
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Markus Schaaf Guest
|
Posted: Sat Dec 13, 2003 4:03 pm Post subject: Re: char_traits und ICCs basic_string Implementation |
|
|
"Daniel Albuschat" <daniel (AT) viming (DOT) de> schrieb:
| Quote: | struct MyChar { char val; };
Das ist aber kein Char-Typ,
|
Da es keine Definition für "Char-Typ" gibt, ist diese Aussage sinnlos.
| Quote: | weil er sich nicht wie ein char verhaelt.
|
Das braucht er auch nicht. Er braucht lediglich alle Bedingungen für
seine Traits-Klasse zu erfüllen und POD zu sein.
| Quote: | z.B. geht MyChar c = 'a'; nicht.
|
Dann ist Dein Compiler nicht Std-konform (§8.5.1/3). Mindestens sollte
er aber
MyChar c = { 'a' };
akzeptieren. Außerdem hindert Dich ja niemand, einen C'tor für diesen
Typen zu definieren.
| Quote: | Und c == 'a' auch nicht, etc.
|
Das ist auch keine notwendige Bedingung für einen Elementtypen von
»std::string«. Genau deshalb existieren ja die »char_traits«!
| Quote: | Da liegt ja mein Problem... fuer diese Dinge muesste man Operatoren
ueberladen, aber dann hat man kein POD mehr... sehr doof,
wie ich finde.
|
Wie kommst Du auf dieses schmale Brett? Für einen POD-Typen darf man
alle Operatoren, bis auf den Copy-Assignment-Operator überladen, ohne
daß er seine Eigenschaft, POD zu sein, verliert.
| Quote: | Kann ich denn sicher gehen, dass std::string den Char-Typen garnicht
benutzt, sondern alles auf char_traits auslagert?
|
Dieser Satz ergibt keinen Sinn. Wenn man ihn gutmütig interpretierte,
wäre die Antwort "Ja".
| Quote: | Dazu konnte ich im Standard nichts finden...
|
Benutze die elektronische Version und ein Leseprogramm mit Suchfunktion!
MfG
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Thomas Maeder Guest
|
Posted: Sun Dec 14, 2003 6:32 pm Post subject: Re: char_traits und ICCs basic_string Implementation |
|
|
"Markus Schaaf" <markus (AT) sags-per-mail (DOT) de> writes:
| Quote: | Außerdem hindert Dich ja niemand, einen C'tor für diesen
Typen zu definieren.
|
Die Anforderung, dass der Typ ein POD-Typ sein muss, tut dies.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|