Problem mit fopen()



  • kann es sein, dass du lern-faul bist?

    Gut möglich. 😃

    Ist bei STLPort auch eine neue Version von fstream dabei?

    ChrisM



  • Original erstellt von ChrisM:
    Ich seh in der C++-Lösung für mich halt im Gegensatz zu anderen nützlichen Templates wie die STL-Container keine Vorteile.

    hast natürlich recht, C Filehandling ist eh viel besser

    hier ein paar Beispiele, die dies schön zeigen

    class foo
    {
      friend std::ostream &operator<<(std::ostream&,const foo&);
    //...
    };
    
    void bar(std::ostream &out) {
      foo baz(/*...*/);
      //...
      out << baz << endl;
      //...
    }
    

    das lässt sich natürlich eben so leicht mit C Filehandling darstellen 😉

    oder ein weiteres schönes Beispiel

    template<class T> void foo(std::ostream &out,const T¶m)
    {
      out << param << endl;
    }
    

    das ist natürlich auch ganz leicht mit C Filehandling 😉



  • Wie einigen bereits bekannt ist, HASSE ich ja I/O. Wie war das noch? Man sollte keine fstreams als Member haben, oder so (hab ich ma gehört, hatte auch Probleme mit irgendsowas). Ich gehöre außerdem zu der Spezies, die möglichst nur bool? getline(istream&,string&) verwenden. Da ist ChrisM's anti-iostream Einstellung doch irgendwo verständlich. Für binäre Dateien is aber eh open(), creat(), close(), read(), write() am coolsten 😉

    EDIT: nein, memory mapping rulet

    [ Dieser Beitrag wurde am 26.04.2003 um 14:41 Uhr von Mr. N editiert. ]



  • Wie war das noch? Man sollte keine fstreams als Member haben, oder so (hab ich ma gehört, hatte auch Probleme mit irgendsowas).

    ist mir neu. begründe mal.

    bool?

    istream



  • @volkard: zum ersten Punkt: habs vergessen
    zum zweiten: ah. erscheint logisch aber trotzdem sinnlos (wer macht schon getline(cin, s) >> i;?)



    1. Weil fstreams sich nicht kopieren lassen. Für Volkard ist das, wenn ich mich richtig erinnere, natürlich kein Grund, weil seine Klassen sich idR auch nicht kopieren lassen.

    2. Ist aber nicht logisch, ist sogar falsch, weil 'basic_istream<charT,traits>&' richtig ist.



  • @Daniel E.
    dann schreibt man einen nicht trivialen cctor und schon kann man kopieren

    class foo
    {
      std::ofstream bar;
    public:
      foo(const char *x) : bar(x) { }
      foo(const foo &obj)
       : bar(obj.bar.rdbuf())
      { }
    };
    


  • Original erstellt von kingruedi:
    dann schreibt man einen nicht trivialen cctor und schon kann man kopieren

    Dein Code ist so verdammt nichttrivial, dass nicht mal meine anwesende Compilersammlung ihn versteht.

    Dateideskriptoren geben (mir?) logisch keinerlei sinnvolle Kopiersemantik vor. Was soll man drunter verstehen? Schreiben 2 'kopierte' Dateihandler in die gleiche Datei? Schreibt erst mal Handler1, dann kommt Handler2 und macht alles wieder platt? [Bisher arbeite ich sowieso noch auf einer Datei; wieso sollte man das auf Programmiersprachenebene trennen?] Das Konzept 'copy' aka 'cp', dass man auf Dateiebene hat, macht etwas anderes, es vergibt einen neuen Namen.



  • Original erstellt von Mr. N:
    Man sollte keine fstreams als Member haben, oder so

    Und was spricht gegen eine Referenz auf einen fstream?

    [ Dieser Beitrag wurde am 27.04.2003 um 00:20 Uhr von nman editiert. ]



  • ein ding, das sinnvollerweise nen fstream als member hat, läßt sich sinnvollerweise auch nicht kopieren. sehe da kein problem.


Anmelden zum Antworten