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