On 12/02/2010 09:05 AM, vincent picaud wrote:
Matthias Pleh Wrote:



Thank you for your reply and yes that works :)

Now i m facing with the following problem, what is the trick for input stream ?

( something like

std::istream&   operator>>(std::istream&   in,A&   a)
{
    //  A.someData<<   in;
    return in;
}

in C++ )

I m thinking of the situation when we want to load some data from a file.

The toString() trick is okay for saving the object... but how to load it back 
(something like fromString(char[]) would do the job but it does not exist in 
Object) ?

Anyway thank you, you solved half of my problem :)



Ther are many posibilities, depending on your further needs! Just have a
look at the online dokumentation:
http://www.digitalmars.com/d/2.0/phobos/phobos.html

But my first try would be such ..
(note: I've leaved out error-handling ...)

module test;

import std.stdio;
import std.file;

class A
{
      void writeToFile()  { std.file.write("sample.txt",someData);   }
      void readFromFile() { someData=cast(string)read("sample.txt"); }
      void clear()        { someData="n/A\n"; }
      string toString()   { return someData;  }
private:
      string someData="Just some data.
With anohter line of date.
Even more data.!"; 
}

int main(string[] args)
{
        A a=new A;
        a.writeToFile();
        a.clear();
        writeln(a);
        a.readFromFile();
        writeln(a);
        return 0;
}

thank you for all your answers. I understand the approach, but in the same 
time, I have the feeling that the C++ way is more convenient.

Look in C++ , to define I/O  for A,  you do not have to modify your class A and 
simply have to overload two functions:

std::ostream&  operator<<(std::ostream&  out,const A&  a)
std::istream&   operator>>(std::istream&   in,A&   a)

moreover this smoothly extend the I/O C++ framework without other side effect.

I was expecting to find a similar mecanism in D/Phobos

Perhaps by overloading some read(), write() functions of the Phobos library, but I do not 
know if it is "moral" to do that and which phobos functions are concerned... 
IMHO there is a documentation hole here



What you want is the new writeTo system for output. For input, a readFrom would be symmetrical and make sense :-)

To actually use it, you would just do myFile.write(your, stuff, etc);

For now, you can stringify using toString(). No way to read yet, except to!int, etc.

Reply via email to