Changeing return type of struct.toString()
code at benjamin-thaut.de
Mon Feb 13 06:41:14 PST 2012
Am 13.02.2012 15:23, schrieb Steven Schveighoffer:
> On Mon, 13 Feb 2012 08:40:20 -0500, Benjamin Thaut
> <code at benjamin-thaut.de> wrote:
>> Am 13.02.2012 13:26, schrieb Stewart Gordon:
>>> On 13/02/2012 02:21, Don wrote:
>>>> I don't know why struct toString() still exists.
>>> What are you talking about? If you define a struct, it doesn't have any
>>> methods other than the ones you put into it.
>> import std.stdio;
>> struct fun
>> string toString()
>> return "fun";
>> void main(string args)
>> auto ti = cast(TypeInfo_Struct)typeid(fun);
>> fun gun;
>> If you change the return type of toString() to int for example the
>> program will crash because ti.xtoString will be null. Therefore the
>> compiler seems to check what type toString() does return and only
>> fills the type info if it actually does return a string.
> That is a legacy feature, back when writefln was a D variadic function
> (not a template), and all you had was the TypeInfo.
> It's essentially a hack that the compiler puts several "special"
> function pointers into the typeinfo to give structs a sort of runtime
> interface. I think we can get rid of most, if not all, of those
> x-functions. But then we need to get rid of all the usages of those. It
> shouldn't be too difficult at this point, it just needs to be done.
So you want every format like function to be a template instead of a
variadic function? I actually found it pretty nice that printing structs
is possible without templates. I don't want to imagine how big the code
bload would be if you actually make format a template instead of a
More information about the Digitalmars-d