Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

11

27.12.2014, 20:55

Ich persönlich hasse die Namenskonvention bei der STL. Besonders nervig wenn meine Klasse auch ein Konzept aus der STL ist. Trotzdem habe ich mich damit abgefunden, man kann halt nicht alles selbst machen.

@Legend
Der Austausch zwischen einem assoziativen Container und einem sequentiellen Container ist nun mal schwierig, weil der Typ in C++ schon vorher "std::pair" gewesen sein müsste. In C# ist es mit "KeyValuePair" aber im Wesentlichen kaum anders.

Um mit einem beliebigen Container in C++ arbeiten zu können, muss man entweder wieder ein Type Alias auf den Iterator machen, oder, wenn es sich um eine allgemeine Implementierung handelt, die mit jedem Iterator klar kommen soll, ein Template, wie es auch in der STL zum Beispiel bei "algorithm" gehandhabt wird.

Assoziative Container habe ich eigentlich eher selten. Ich verwende habe ich manchmal sogar altmodische Raw-Pointer als Iteratoren verwendet. Dann kann man als Bonus noch beliebige Arrays übergeben.

Zitat von »Legend«

Also laut diesem Link hier (http://www.cprogramming.com/tutorial/string.html) sind std::string Objekte mutable.

Ja, die "std::string" schon. Ich denke aber, Schorsch meint aber nicht die Implementierung der STL. Wenn man die String-Klasse selbst entwickeln würde, kann man darüber eigentlich selbst entscheiden. Meiner Meinung kann es schon Sinn machen, einen String immutable zu machen. Gleiche Strings oder Sub-Strings könnten sich dann Speicherbereiche teilen.

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

12

27.12.2014, 21:10

Ein KeyValuePair bekommst du wenn du in C# über das Dictionary iterierst. Wenn du über http://msdn.microsoft.com/de-de/library/…=vs.110%29.aspx iterierst bekommst du die Values ohne Key. Mit http://msdn.microsoft.com/de-de/library/…=vs.110%29.aspx könnte man sich das aber sogar mit wenig Aufwand selber bauen.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

13

27.12.2014, 22:32

Ok, diese Funktionalität gibt es, soweit ich weiß, in der STL nicht.
Wenn du es so machst wie bei mir im zweiten Absatz beschrieben, könntest du einen Iterator schreiben, der diesen Zugriff ermöglicht. Man kann es wahrscheinlich als Template auslegen und wiederverwendbar gestalten.

EDIT:
Boost soll so etwas anscheinend schon besitzen: http://stackoverflow.com/questions/15654…ator-operations

Pixma

Frischling

  • »Pixma« ist der Autor dieses Themas

Beiträge: 35

Wohnort: Mainz

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

14

28.12.2014, 14:59

wow, vielen Dank für eure Antworten. :)
Ich habe mich nun wirklich entschieden, meine Wrapper Klasse weg zu lassen und die STL so zu verwenden.
Ich werde den String auch denke umgestalten. Ich werde den String zu einer Nonmutable Klasse machen.
Ein Grund ist denke der Hashtable. Denn würde ich der String Klasse Methoden wie zb. "Append", "Insert" usw geben. Müsste ich jeden Teil vom String neu in den Hashtable eintragen und das ist denke ich overkill.
Jedoch werde ich erstmal dies als const char* machen, weil ehrlich gesagt kenne ich mich mit den Boost Pointern noch garnet so wirklich aus. Verwende zurzeit nur die CRC32 Komponente um den String zu hashen.
Meine Überlegung geht dann desweiteren zu einer Klasse U16StringStream oder so welche Methoden wie "Append", "Insert" besitzt. Diese ist sozusagen dann mutual.

Mir war auch wichtig zu erfahren ob meine Wrapper Klassen schrott sind oder nicht, weil es denke besser ist, dies frühzeitig zu wissen, anstatt wenn man dann später alles wieder ändern muss.
Deshalb vielen, vielen Dank für eure Ratschläge und Kritiken. :)

Gruß Dennis

Werbeanzeige