std::string Konstruktor



  • Hi Leute,

    wenn ich einer Funktion einen zusammengesetzten String (std::string) übergeben möchte mache ich das bisher so:

    foo(std::string("Dies ") + "ist ein " + "zusammengesetzter string.");
    

    Der String-Konstruktor zu Beginn sorgt dafür, dass ich den "+"-Operator anwenden kann. Nun würde ich aber gerne den Konstruktor am Anfang los werden, um den Code "schöner" bzw. lesbarer zu machen. Die einzige Lösung die mir einfällt währe ein Makro für den Präprozessor, das einfach "std::string(...) einsetzt:

    foo(S("Dies ") + "ist ein " + "zusammengesetzter string.");
    

    Gibt's da nicht ne schönere Lösung?

    Grüße,
    lucien



  • Wenn du nur mit String-Literalen arbeitest, kannst du die + Zeichen auch weglassen - das fügt der Compiler zu einem einzigen Literal zusammen. Wenn du Literale und std::string Variablen mixen willst, reicht notfalls die richtige Klammerung, damit der Operator anwendbar ist.



  • Danke für den Hinweis den Literalen. Ich hab noch ein wenig rumprobiert und anscheinend hab ich mir da was falsch gemerkt. 🙄
    Hast du noch nen schnellen Tip zu string + integer? Stringstreams blähen den Quelltext immer so auf. Eigene Unterklasse schreiben? ...oder hab ich da auch wieder was übersehen?



  • /dev/lucien schrieb:

    Hast du noch nen schnellen Tip zu string + integer?

    sprintf() oder itoa() (letzteres ist afaik nicht im Standard) wären Alterantivmöglichkeiten zu Stringstreams.





  • oder boost::lexical_cast. Ist glaub ich auch im TR2 drin.



  • Wobei der intern auch wieder einen stringstream verwendet.


Anmelden zum Antworten