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