Stream kopieren



  • Hi, kann ich irgendwie einen Stream kopieren? (KEINE Referenz)
    Wie macht man sonst sowas in der Form:

    #include <fstream>
    #include <iostream>
    //...
    
    Logger l;
    
    void init() {
       l.fuegeGeraetHinzu(std::ofstream("mylog.txt"));
    }
    
    int main(int, char**) {
      init();
      c<<"Test"; //Segfault. 
    }
    


  • Am besten gar nicht, der Aufrufer soll sich um das Objekt kümmern.
    Und wie willst du mit deinem Kopieransatz zum Beispiel cout als "Gerät" hinzufügen können?



  • Ja das war ja meine Frage, ob das denn geht. Also geht das nicht?



  • Man könnte das vermutlich Gewünschte so erreichen:

    //es wird kein ostream gespeichert, sondern eine Funktion, die einen bei Bedarf liefert
    void fuegeGeraetHinzu(std::function<std::ostream &()>);
    
    static std::ostream &returnArgument(std::ostream &os)
    {
    	return os;
    }
    
    static std::ostream &dereference(std::shared_ptr<std::ostream> os)
    {
    	return *os;
    }
    
    int main()
    {
    	fuegeGeraetHinzu(std::bind(returnArgument, std::ref(std::cout)));
    	fuegeGeraetHinzu(std::bind(dereference, std::make_shared<std::ofstream>("name")));
    }
    

    Geht auch mit bind , shared_ptr , make_shared und ref aus boost .


Anmelden zum Antworten