operator << und streams



  • Hallo,

    letztens hab ich mir überlegt für eine Logging Routine den operator << zu überladen, klappt auch ohne Probleme, wie z.B. hier:

    blub<<"blub";
    

    Nun ging die Idee weiter und ich wollte mehrere male den Operator in der Art aufrufen:

    blub<<"awwww"<<"bluba";
    

    Leider funktioniert das ja so nicht denn da versucht er beim zweiten Operator "bluba" in "awwww" rein zudrücken, was ja nicht geht.

    Nun ist meine Frage ob die zweite Variante irgendwie möglich ist, denn die Standardstreams (sagt man das so?), wie std::cout,std::fstream usw. usw. können das ja ohne Probleme handeln und im Grunde sind es ja auch nur Klassen (oder?).

    Hoffe das Problem is verständlich, google hat leider auf die Schnelle nix gescheites ausgespuckt. :xmas1:

    --
    Grüße eichelt



  • effe_eichelt schrieb:

    blub<<"awwww"<<"bluba";
    

    Leider funktioniert das ja so nicht denn da versucht er beim zweiten Operator "bluba" in "awwww" rein zudrücken, was ja nicht geht.

    Nö, denn gleichrangige Operatoren werden von links nach rechts abgearbeitet, also wäre die Verarbeitungsfolge in dem Fall wie folgt:

    ( blub << "awwww" ) << "bluba"
    

    Lösung:
    Dein operator<< muss eine Referenz auf den Stream zurückgeben, den er als ersten Parameter übergeben bekommt, also so:

    MyStream& operator<<( MyStream& s, string const& value )
    

Log in to reply