Wie ist der (innere)Aufbau einer String-Klasse?
-
es ist wohl so, dass die Klassen-Bibliotheken von Microsoft 'geheimen' Code enthalten.
Ich würde 'dennoch' gern einmal wissen wollen, wie diese Klassen wie beispielsweise <string> aufgebaut sind. Also was würde in der cpp stehen wenn diese sichtbar wäre?
Natürlich nur so ungefähr: sind diese genauso 'aufgebaut' wie die eigenen Klassen die man selber schreibt oder sind diese in einer 'eigenen' Codesprache verfasst?
Oder wie kann man sich das bei der Klasse string vorstellen?
Ich bin Programmierquereinsteiegeranfänger
Vielen Dank für Links und Info
-
Hi!
Kein geheimer Code. Du kannst dir die std::string deines Compilers gern anschauen, die liegt als Quellcode irgendwo im include-Verzeichnis deines Compilers. Die hoechste Magie, die da passiert, ist dass irgendwelche nicht-standardisierten Compilererweiterungen verwendet werden.EDIT: hoechstwahrscheinlich ist der std::string nicht viel mehr als ein Wrapper um ein char-Array, gepimpt mit ein paar Templates.
-
Genau genommen ist string ein typedef für basic_string<char>. Und basic_string<T> ist in der Regel ähnlich organisiert wie ein vector<T> mit ein paar extra Methoden.
-
Die string-Klasse ist genau so aufgebaut wie andere Klassen auch. String ist übrigens nur ein typedef für std::basic_string<char> und da das mit Templates arbeitet, müsste das sogar in den Headern stehen.
Alternativ kannst du dir den Source Code vom GCC herunterladen und da nachschauen.
-
Dazu muss man sich den GCC nichtmal runterladen:
http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/include/bits/basic_string.h?view=markup
(und ein paar der Methoden sind hier implementiert: http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/include/bits/basic_string.tcc?view=markup )
-
Vielen Dank für eure Unterstützung.
Jetzt habe ich eine bessere Vorstellung davon wie solch eine 'interne' Klasse aufgebaut ist.
Danke
-
std::string ist nicht wirklich toll designt.
-
sxxxxxxxxxx schrieb:
std::string ist nicht wirklich toll designt.
Warum?
-
tntnet schrieb:
sxxxxxxxxxx schrieb:
std::string ist nicht wirklich toll designt.
Warum?
http://ridiculousfish.com/blog/archives/2009/09/17/i-didnt-order-that-so-why-is-it-on-my-bill-episode-2/
(ist aber nur eine Kleinigkeit.)
-
wow, fast 3000 Zeilen Code für so eine simple Utility Klasse.
Alle möglichen und unmöglichen Methoden reingepackt, möglichst in 3 oder 4 Ausführungen, mit unterschiedlichen Namen.* 3 Methoden, mit unterschiedlichem Namen, für die Länge
* 3 Methoden, mit unterschiedlichem Namen, um die Größe zu ändern
* 12 verschiedene Methoden um etwas am String hinzu zu fügen.
* Den Rekord hält die Methode um einen Teil zu ersetzen, mit 14 Ausführungen.Wie viel Zeilen Code hat der Unit Test für die basic_string Klasse?
-
DEvent schrieb:
Wie viel Zeilen Code hat der Unit Test für die basic_string Klasse?
Eine
diff string string
-
DEvent schrieb:
wow, fast 3000 Zeilen Code für so eine simple Utility Klasse.
Alle möglichen und unmöglichen Methoden reingepackt, möglichst in 3 oder 4 Ausführungen, mit unterschiedlichen Namen.* 3 Methoden, mit unterschiedlichem Namen, für die Länge
* 3 Methoden, mit unterschiedlichem Namen, um die Größe zu ändern
* 12 verschiedene Methoden um etwas am String hinzu zu fügen.
* Den Rekord hält die Methode um einen Teil zu ersetzen, mit 14 Ausführungen.Und wegen der Untauglichkeit von std::string in Verbindung mit Internationalisierung gibt es mit std::wstring praktische eine Verdoppelung.
-
swswws schrieb:
DEvent schrieb:
wow, fast 3000 Zeilen Code für so eine simple Utility Klasse.
Alle möglichen und unmöglichen Methoden reingepackt, möglichst in 3 oder 4 Ausführungen, mit unterschiedlichen Namen.* 3 Methoden, mit unterschiedlichem Namen, für die Länge
* 3 Methoden, mit unterschiedlichem Namen, um die Größe zu ändern
* 12 verschiedene Methoden um etwas am String hinzu zu fügen.
* Den Rekord hält die Methode um einen Teil zu ersetzen, mit 14 Ausführungen.Und wegen der Untauglichkeit von std::string in Verbindung mit Internationalisierung gibt es mit std::wstring praktische eine Verdoppelung.
Und damit das mit der Internationalität mal gescheit klappt, wünsche ich mir endlich std::u8string und std::u8cout usw.
-
und http://de.wikipedia.org/wiki/UTF-32 und http://de.wikipedia.org/wiki/UTF-16 und http://de.wikipedia.org/wiki/UTF-7
-
UTF-32 könnte man ja noch als std::basic_string<uint32_t> oder std::basic_string<long int> oder so definieren, aber bei u8string oder so müsste dann schon eine eigene Klasse herhalten
-
swswws schrieb:
Und wegen der Untauglichkeit von std::string in Verbindung mit Internationalisierung gibt es mit std::wstring praktische eine Verdoppelung.
wstring und string sind beide nur ein typedef für basic_string.
-
rüdiger schrieb:
swswws schrieb:
Und wegen der Untauglichkeit von std::string in Verbindung mit Internationalisierung gibt es mit std::wstring praktische eine Verdoppelung.
wstring und string sind beide nur ein typedef für basic_string.
Weswegen aber bei der Template-Instantiierung von beiden trotzdem der Code verdoppelt wird.
-
wxSkip schrieb:
Weswegen aber bei der Template-Instantiierung von beiden trotzdem der Code verdoppelt wird.
Das ist ja jetzt ein tolles Argument. Wenn ich einen std::vector<float> und einen std::vector<double> anleg und verwende ist das böse Codeduplizierung?
Das haben templates so an sich. Und das ist schön so. Die einzige Alternative: alles über void-Pointer regeln...
-
l'abra d'or schrieb:
wxSkip schrieb:
Weswegen aber bei der Template-Instantiierung von beiden trotzdem der Code verdoppelt wird.
Das ist ja jetzt ein tolles Argument. Wenn ich einen std::vector<float> und einen std::vector<double> anleg und verwende ist das böse Codeduplizierung?
Das haben templates so an sich. Und das ist schön so. Die einzige Alternative: alles über void-Pointer regeln...Ich habe ja gar nicht gesagt, dass ich es schlecht finde. Ich habe jetzt bloß die Argumentation von swswws so aufgefasst, dass er jetzt findet, dass die Datei unnötig groß ist, er könnte aber damit genausogut gemeint haben, dass sich die STL-Entwickler unnötig viel Mühe gemacht haben.
-
rüdiger schrieb:
swswws schrieb:
Und wegen der Untauglichkeit von std::string in Verbindung mit Internationalisierung gibt es mit std::wstring praktische eine Verdoppelung.
wstring und string sind beide nur ein typedef für basic_string.
Ja und schon die Tatsache, dass es beide gibt ist Müll. Schreibst du Funktionen denen du als Parameter wstring, string oder basic_string übergibst?