C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

char_traits und ICCs basic_string Implementation

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Daniel Albuschat
Guest





PostPosted: Fri Dec 12, 2003 7:20 pm    Post subject: char_traits und ICCs basic_string Implementation Reply with quote



-----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





PostPosted: Fri Dec 12, 2003 10:29 pm    Post subject: Re: char_traits und ICCs basic_string Implementation Reply with quote



"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





PostPosted: Sat Dec 13, 2003 12:07 pm    Post subject: Re: char_traits und ICCs basic_string Implementation Reply with quote



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





PostPosted: Sat Dec 13, 2003 4:03 pm    Post subject: Re: char_traits und ICCs basic_string Implementation Reply with quote

"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





PostPosted: Sun Dec 14, 2003 6:32 pm    Post subject: Re: char_traits und ICCs basic_string Implementation Reply with quote

"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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.