Anyone have a function to print out the field name and its value?

Robert Clipsham robert at octarineparrot.com
Sat Apr 9 10:23:08 PDT 2011


On 09/04/2011 18:13, Andrej Mitrovic wrote:
> Let's say I have this structure:
>
> struct PAINTSTRUCT
> {
>      bool state;
> }
>
> And somewhere in my main code I want to print out the value of state. But I also want to know what I'm printing out. So usually I'd do this:
> void main()
> {
>      PAINTSTRUCT ps;
>      writefln("ps.state = %s", ps.state);
> }
>
> Has anyone written a function which will automatically print out both the variable name and any object it might be part of, and then the value?
>
> E.g. I'd like to use a function like this:
> writeField(ps.state);
>
> And if state is false it would print out to the console:
> "ps.state = false"
>
> I can't really touch PRINTSTRUCT because it's already defined as a WinAPI structure and messing with that would be bad, so I can't implement toString() or any helper functions within the struct. I need an outside function which could do this automatically for any object/struct type.

Off the top of my head (untested):
----
void print(T)(T t) if (is(T == struct) || is(T == class))
{
     foreach (i, field; t.tupleof)
     {
         writefln(T.tupleof[i].stringof ~ " = %s", field);
     }
}
----

--
Robert
http://octarineparrot.com/


More information about the Digitalmars-d-learn mailing list