in den namespace std schreiben? wie groß ist diese Sünde?
-
ich hatte hier ja letztens die diskussion angefangen,wie man einen stream iostream kompatibel neuschreiben kann,und am ende blieb ich dann dabei, eine traits spezialisierung für meinen typ durchzuführen, da mich die facets nicht viel weitergebracht haben.
class basic_istream<charT,MTL::Identity<Traits> >:virtual public basic_ios<charT, Traits>{ ... };
nunja, das ende vom lied ist natürlich, das alles funktioniert...naja, bis auf die tatsache, dass der compiler basic_istream nur innerhalb des std-namespaces kennt.
neben der tatsache, dass das ein grund mehr ist, eine basisklasse für die streams im neuen standard zu fordern, wie groß ist die Sünde, diese spezialisierung in den namespace std zu schreiben?
-
Ziemlich groß, weil deine Klasse nun mal kein Bestandteil der stdlib ist.
In Java z.B. dürftest du deine Klasse gar nicht in so ein package legen (SecurityException...).
Ich denke mal schon, dass man sich darauf verlassen können muss, dass etwas auf jedem Compiler verfügbar ist, wenn man es aus dem namespace std benutzt...
-
in java wäre so ein handeln aber auch nicht nötig, da man einfach irgendne baseclass nehmen könnte,bei c++ hat man leider nicht diese Freiheit, da muss es das nonvirtual istream/ostream/iostream sein...
*grmlIchHasseDieIostreamLibrarieGrml*
*lach* vielleicht sollte ich mal die komplette iostream lib neu implementieren, von euch durchsehen lassen, dann 2 Klassen noch dazu entwickeln, als positives beispiel, und dann dem standardcomitee zusammen mit einem netten Brief zuschicken
-
Also ich würde auf keinen Fall in fremden Namespaces herumpfuschen, weil das nur zu Problemen führt und der Nutzen mehr als fraglich ist.
-
otze schrieb:
wie groß ist die Sünde, diese spezialisierung in den namespace std zu schreiben?
Wie kommst du darauf, dass dies überhaupt eine Sünde ist? Ausgedacht?
Also in meiner Version des C++ Standards steht in 17.4.3.1a program may add template specializations for any standard library template to namespace std.
Zwei Bedingungen müssen erfüllt werden, damit dies kein UB ist:
- Der Typ auf den Spezialisiert wird muss ein benutzer-definierter Typ mit external Linkage sein.
- Bedingungen die der Standard für das Originaltemplate stellt müssen auch von der Spezialisierung erfüllt werden.
*lach* vielleicht sollte ich mal die komplette iostream lib neu implementieren, von euch durchsehen lassen, dann 2 Klassen noch dazu entwickeln, als positives beispiel, und dann dem standardcomitee zusammen mit einem netten Brief zuschicken
Du demonstrierst hier zwar Tag für Tag ein Mega-Ego, nichtsdestotrotz würde ich dir das ehrlich gesagt lange nicht zutrauen (ich zweifle ehrlich gesagt daran, dass es hier überhaupt jemand im Forum gibt, der diese Aufgabe bewältigen könnte. Ein Bashar oder Volkard vielleicht wenn sie das als Full-Time-Job machen würden. Aber sonst?)
Falls du das Gegenteil beweisen solltest, solltest du das Ergebnis ruhig ans Standardcomitee schicken.
-
HumeSikkins schrieb:
... Ein Bashar oder Volkard vielleicht wenn sie das als Full-Time-Job machen würden. Aber sonst?)
Ein HumeSikkins vielleicht.
-
PuppetMaster2k schrieb:
HumeSikkins schrieb:
... Ein Bashar oder Volkard vielleicht wenn sie das als Full-Time-Job machen würden. Aber sonst?)
Ein HumeSikkins vielleicht.
Sicher nicht. Ich weiß zwar mittlerweile genug über C++ um boost-Bibliotheken benutzen zu können, meine Kentnisse über Library-Design, Internationalisierung, Zeichensätze und Konvertierungen und andere low-level-Dinge die für eine iostream-Library nötig wären, sind aber bei weitem nicht ausreichend.
Nett gemeint, aber völlig unrealistisch.
-
HumeSikkins schrieb:
...
Nett gemeint, aber völlig unrealistisch.Da du dich besser kennst als ich, belasse ich es dann bei dieser Aussage und weiß beim nächsten Mal bescheid :).
-
Ah ja, und volkard kennt sich natürlich mit all diesen Dingen aus.
-
alles klar... schrieb:
Ah ja, und volkard kennt sich natürlich mit all diesen Dingen aus.
Das steht nirgends in Humes Aussagen drin ;).
mfg
v R
-
war ja jetzt übers we nich da,nun wird wieder gepostet
HumeSikkins schrieb:
otze schrieb:
wie groß ist die Sünde, diese spezialisierung in den namespace std zu schreiben?
Wie kommst du darauf, dass dies überhaupt eine Sünde ist? Ausgedacht?
hier gings weniger ums "vom standard erlaubt sein", sondern ums "komm ich hier nochmal lebend raus,wenn ichs tun würde",rein stilitisch gesehen natürlich.
*lach* vielleicht sollte ich mal die komplette iostream lib neu implementieren, von euch durchsehen lassen, dann 2 Klassen noch dazu entwickeln, als positives beispiel, und dann dem standardcomitee zusammen mit einem netten Brief zuschicken
Du demonstrierst hier zwar Tag für Tag ein Mega-Ego, nichtsdestotrotz würde ich dir das ehrlich gesagt lange nicht zutrauen.[/quote]
ehrlich gesag, trau ichs mir ja selber nicht zu, und es war auch zu 3/4 scherzhaft gemeint, aber wenns nach dir ginge, könnte ich wohl auch nicht früh genug richtig auf die fresse mit sowas fliegen, damit ich mir mal die Hörner abstoße, was?ps: nur mal als frage:
die iostream librarie bietet ja über manipulators und facets einige möglichkeiten, um den stream zu ändern, der dann in diesem veränderten zustand den input anders betrachtet. wärs bei den manipulatoren wie hex/oct/uppercase etc nicht besser, dass sie sich direkt auf den input auswirken würden?