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