Current status of toString in phobos

Jonathan M Davis jmdavisProg at gmx.com
Wed Nov 17 21:04:03 PST 2010


On Wednesday 17 November 2010 19:48:30 Matthias Walter wrote:
> Hi,
> 
> I'm currently using DMD v2.049 with phobos. I found an old discussion
> about how toString should be designed and how it is supposed to work. As
> the following code does not print out the number, I wonder what is the
> 
> current status of how to implement a toString function for a struct/class:
> | auto n = BigInt("42");
> | writefln("%s", n);

Object has the function toString(), which you have to override.

Structs have to define toString() as well. However, unlike classes, it's 
signature must be _exactly_ string toString();  You can't add extra modifiers 
such as const or nothrow, or it won't work. You _should_ be able to have extra 
modifiers on it, but it doesn't work at the moment if you do (so I typically end 
up declaring two toString()s - one with the modifiers and one without - and 
declare a private method which they both call that has the actual 
implementation). There's an open bug on it. Once it's fixed, any signature for 
toString() should work for structs as long as its name is toString() and it 
returns a string.

As for BigInt, for some reason it doesn't have a normal toString(). Instead, it 
has one which you pass a delegate and format string to in order to control how 
it's converted to a string. It's probably useful, but I do think that it should 
have a normal toString() method as well. I've opened a bug report on it: 
http://d.puremagic.com/issues/show_bug.cgi?id=5231

And by the way, version 2.050 is the most recent version of dmd, so you might 
want to grab it.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list