C++ istream / ostream equivalent ?

Dmitry Olshansky dmitry.olsh at gmail.com
Wed Dec 1 10:07:14 PST 2010


On 01.12.2010 20:11, Matthias Pleh wrote:
> Am 01.12.2010 16:51, schrieb vincent picaud:
>> Is there a canonical way to take into account a new type for I/O 
>> using the std phobos library ?
>>
>> To be clear I do not know how to translate something like this (in 
>> C++)  in D :
>>
>> #include<iostream>
>>
>> class A {};
>>
>> std::ostream&  operator<<(std::ostream&  out,const A&  a)
>> {
>>    out<<  "\nscreen output routine here\n";
>>    return out;
>> }
>>
>> int main()
>> {
>>    A a;
>>    std::cout<<  a;
>> }
>>
>> Do I have to overload some writeln functions ?
>>
>> any help is welcome :)
>
> I would make it this way:
>
> module test;
>
> import std.stdio;
>
> class A{}
> class B{ string toString() {return "screen output routine here";}}
>
> int main(string[] args)
> {
>     A a=new A;
>     B b=new B;
>     writeln(a.toString());
>     writeln(b.toString());

Or even more implicit version, since writeln and the likes recognize 
toString:
writeln(a);
writeln(b);

>     return 0;
> }
>
> output:
> > test.A
> > screen output routine here
>
> Base-class of all classes is object with have a default-toString() 
> method, which gives the module.classname.
> So you can overwrite this method.
Well there is a relatively new proposal which aims to replace toString 
with more eficient and flexible function (and was generally accepted):
http://www.prowiki.org/wiki4d/wiki.cgi?LanguageDevel/DIPs/DIP9

-- 
Dmitry Olshansky



More information about the Digitalmars-d-learn mailing list