Wrapper für std::cout?



  • Hi,

    ich brauche (und bitte fragt nicht wozu :() vor meiner Ausgabe ein konstantes Zeichen. Ich habe mir überlegt, das eine Art "Wrapper" ganz von Nutzen sein könnte.

    Im Prinzip mag ich das hier in meinem Programm stehen haben:

    using namespace std;
    cout << "bla" << endl;
    cout << "blu" << endl;
    

    Und das würde ich wirklich gerne ausgegeben bekomm:

    :bla
    :blu
    

    Habe leider von Vererbung und Überladen keine grosse Ahnung 😕
    Schaue mir seit vielleicht 3 Monaten jetzt C++ an...

    Danke!! 😞



  • Musst du nur mit Stringliteralen fertig werden? Dann könntest du einfach so eine Funktion schreiben:

    void Output(const char* str)
    {
        std::cout << ':' << str << '\n';
    }
    

    Sonst wird das Ganze etwas komplizierter, du müsstest dazu den Anfang einer Ausgabe noch sinnvoll definieren können.



  • Eine Funktion dazu zu schreiben, ist mir auch in den Sinn gekommen. Aber damit würde ich ja so viele Vorteile, die ich hätte, würde ich cout benützen, aufgaben... 😞

    Dann wollte ich eine Klasse dazu schreiben... ich dachte aber, dass ich evtl. das Rad nur für dieses eine Zeichen nicht unbedingt neu erfinden müsste.

    Sieht aber wohl so aus...?



  • Ich meinte natürlich aufgeben, nicht "aufgaben" 🙄



  • Es kommt mir vor als wärest du betrunken. Nimm einfach die Funktion von Nexus, ist das einfachste.

    EDIT: Welche Vorteile von std::cout meinst du genau?


  • Mod

    Das sollte mit Boost::Iostreams ganz einfach sein:

    #include <boost/iostreams/filter/line.hpp>
    #include <boost/iostreams/filtering_stream.hpp>
    
    #include <iostream>
    #include <string>
    
    namespace io = boost::iostreams;
    
    class mach_doppelpunkt_davor : public io::line_filter {
    private:
      std::string do_filter(const std::string& line)
      {
        std::string kopie = ":";
        kopie += line;
        return kopie;
      }
    };
    
    int main()
    {   
        io::filtering_ostream out;
        out.push(mach_doppelpunkt_davor());
        out.push(std::cout);
    
        out << "bla" << std::endl;
        out << "blu" << std::endl;	
    }
    

Anmelden zum Antworten