Nutzung der STL in Firmen. Ist die STL schlimm?
-
Arcoth schrieb:
Foo((stringstream() << s << "foo" << s2 << Bar(1, 2, 3)).str());
Sowieso ill-formed. Da gehoert noch ein Cast hinzu.
Laesst sich aber bestimmt leicht fixen.Wo soll da bitte ein Cast fehlen?
Und schreib das nächstes mal bloss nicht gleich dazu.
-
hustbaer schrieb:
Arcoth schrieb:
Foo((stringstream() << s << "foo" << s2 << Bar(1, 2, 3)).str());
Sowieso ill-formed. Da gehoert noch ein Cast hinzu.
Laesst sich aber bestimmt leicht fixen.Wo soll da bitte ein Cast fehlen?
operator << liefert einen std::ostream& zurück. std::ostream hat keine methode str()...

-
Hmpf.
Ich mach das normalerweise nur mit boost::format(). Und da funktioniert es. Ich weiss schon warum ich die C++ IO-Streams nicht mag.
-
dot schrieb:
operator << liefert einen std::ostream& zurück. std::ostream hat keine methode str()...

Aus welchem Grund gibt operator<<(std::ostringstream&,value) keinen ostringstream zurück?
-
ostream.str schrieb:
dot schrieb:
operator << liefert einen std::ostream& zurück. std::ostream hat keine methode str()...

Aus welchem Grund gibt operator<<(std::ostringstream&,value) keinen ostringstream zurück?
Weil es keinen operator<<(std::ostringstream&,value) gibt, sondern nur einen operator<<(std::ostream&,value)
wäre sonst ja doof wenn du einen eigenen op<< für deine Klasse anbieten wollen würdest und dann diese für alle unterschiedlichen ostream subklassen überladen müsstest

-
Und schreib das nächstes mal bloss nicht gleich dazu.
Was meinst du damit?

-
Arcoth schrieb:
Und schreib das nächstes mal bloss nicht gleich dazu.
Was meinst du damit?

"Schreib es nächstes Mal dazu."
-
@dot
Danke.
Hab's ausgebessert (ich hoffe ich hab' nicht wieder was übersehen).@Arcoth
Ja, ich meine: schreib' es das nächste mal bitte dazu.
Ich geb' ja zu, den Fehler hätte ich selbst finden können. Aber ... manchmal denkt man halt nicht an alles.@Shade Of Mine
Mit nem leicht modifizierten Design hätte man es darauf beschränken können dass jeder Stream die Operatoren neu definieren muss (operator << ruft freie "insert_to_stream" Funktion auf, und diese wird von den Value-Typen überladen - das "return *this" stünde dann natürlich im operator << und nicht in der Hilfsfunktion).Und mit C++11 müsste es sogar ohne eine eigene Funktion pro Stream gehen. Stream-Typ als Template-Parameter der mittels enable_if auf Stream-Typen eingeschränkt ist.
Aber jetzt kann mans natürlich nimmer so leicht ändern.
-
hustbaer schrieb:
Aber jetzt kann mans natürlich nimmer so leicht ändern.
Auch eines der Gründe, nicht die STL nutzen zu wollen.
Wenn das Design in irgendeiner Komponente - sagen wir mal, nicht ganz ausgereift ist - wird das vermutlich für immer so bleiben. Will man es nicht, braucht man Alternativen bzw. implementiert eine eigene.**Wobei man natürlich bei der Implementierung der eigenen auf die STL zugreifen kann.
-
Der * ist der Knackpunkt

(Zu) viele Programmierer sehen das nämlich anders. Und implementieren in ihrer Wut und Raserei dann (ohne guten Grund) alles selbst.
(Wobei ich nochmal darauf hinweisen möchte dass ich durchaus der Meinung bin dass es gute Gründe gibt. Nur dass die meisten die meinen sie hätten so einen guten Grund eben doch keinen haben.)