Definiert?



  • Edit :: Ich glaube, ich habe einen dummen Fehler gemacht, der mich hat glauben lassen, ostream und ofstream wären nicht über normale Referenzen ineinander konvertierbar, dem scheint aber nicht so zu sein. Ich lasse die Frage mal für Kommentare stehen.

    Hi,

    ich habe mal eine Frage an die Experten, ist dieser Scherz hier definiert?

    #include <iostream>
    #include <fstream>
    
    class Test
    {
      std::ostream& f_;
    public:
      Test(std::ostream *f)
        : f_(*f)
      {}
      void test(const char *s)
      {
        if (f_.good())
          f_ << s;
      }
    };
    
    int main()
    {
      using namespace std;
      ofstream testi("testa.txt");
      Test t(&testi);
      t.test("oO?");
    }
    

    Ich könnte es gebrauchen, aber irgendwie ist es ironisch. Hintergrund ist, dass eine Logging-Klasse sowohl mit einem ostream& (cout, cerr z.B.) als auch mit einem std::ofstream funktionieren soll und mir der Umweg über std::streambuf irgendwie so gar nicht zusagen will.



  • Ja, du kannst sowohl cout als auch ofstream s mit ostream abdecken.


  • Mod

    Man sollte noch sagen: cout ist ein ostream in dem Sinne, dass es tatsächlich eine Objektinstanz der Klasse ostream ist, wohingegen ofstream eine von ostream abgeleitete Klasse ist und die Aussage "ein ofstream ist ein ostream" dabei im Sinne von Vererbung gilt. Im Endeffekt heißt das aber auch nur, dass du jeden beliebigen ofstrem oder ostream (also insbesondere auch cout) verwenden kannst, wo ein ostream erwartet wird.


Anmelden zum Antworten