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 Beispielcoutals "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_sharedundrefausboost.