std::map::insert u. operator[] überladen
-
Hallo, ich möchte die o.g. Methoden überladen. Ich habe mir gerade die Doku auf http://www.cplusplus.com/reference/map/map/insert/ angesehen und frage mich was der value_type ist? Jmd. eine Idee? Ferner gibt mir auch der Konstruktor zu denken aber das ist erst mal eine andere Geschichte.
Hat jmd. ein Bsp. bei dem eine map/map-methode überladen wurde?
Thanks
-
value_type ist der Datentyp der Elemente, die du in den Container (hier map) einfügen willst. Willst du Ganzzahlen reinstecken, ist der value_type eben int.
-
Ne andere Frage. Was hast du genau vor? Wieso willst du überladen?
-
Bist du dir überhaupt im Klaren darüber, was überladen heisst?
-
value_typeist einstd::pairaus dem Schlüssel und dem gemappten Typen. Das würde sich auch hier finden: http://www.cplusplus.com/reference/map/map/mapist im Namensbereichstd. Dinge, die da drin sind, kannst du im Grunde genommen nicht ändern. Aber mir stellt sich viel eher die Frage, wozu du das denn überhaupt möchtest.
-
Ich weiß, ich könnte die map auch wrappen und eine eigene insert Methode definieren. Aber das wäre hässlich. Eine abgeleitete my_map wäre kurz und bündig in der Bedienung.
Die insert Methode ist komplex und soll überladen werden. Alles andere bliebe wie gehabt.
-
Was spricht dagegen dies in eine freie Funktion zu packen? IMO viel eleganter und nutzbarer / portabler, vererbte Konstruktoren gibt's erst mit C++11 und ansonsten müsstest du in C++03 einiges an Boilerplate-Code für die Konstruktoren schreiben.
-
C++11 / vererbare Konstruktoren sind der Grund warum ich überlege die insert Methode zu überschreiben.
Eine freie Funktion ist - wie der Bezeichner vermuten läßt - nicht so sehr dem OO Paradigma unterworfen wie eine überladene insert Methode.
Aber wie auch immer, wir schreiben hier über Geschmacksrichtungen. Ich will niemanden überzeugen.
Wenn jmd. ein Bsp. oder einen Link mit einem hat, freue und bedanke ich mich.

-
goran schrieb:
C++11 / vererbare Konstruktoren sind der Grund warum ich überlege die insert Methode zu überschreiben.
Was willst du?
Eine freie Funktion ist - wie der Bezeichner vermuten läßt - nicht so sehr dem OO Paradigma unterworfen wie eine überladene insert Methode.
Wir sind hier in C++, keiner interessiert sich für OO Paradigmen.
Ich kann die Fälle von (public) Vererbung in meinen 10k Zeilen Code an einer Hand abzählen (dezimal, nicht binär). Und das ist Type-Erasure, zählt also nicht als klassische, dynamische Polymorphie.Aber wie auch immer, wir schreiben hier über Geschmacksrichtungen. Ich will niemanden überzeugen.
Wir aber, denn es sind keine Geschmacksrichtungen:
Man leitet nicht aus Klassen der Standardbibliothek ab, außer der Standard erlaubt es (==die Klasse hat einen virtuelen Destruktor). Eine konforme Implementierung darf AFAIK durchaus alle anderen Klasse als final markieren.
Erweiterungen macht man in C++ über freie Methoden.Sag uns, was genau deine tolle neue insert-Methode machen soll und wir zeigen dir, wie mans besser macht.