On Tuesday, 27 June 2023 at 04:56:19 UTC, Ali Çehreli wrote:
On 6/26/23 21:25, Chris Katko wrote:

> How do I get just the field name?

I know .tupleof, which you can typeof() as well:

class myObject{
    int field1, field2, field3;

    static foreach(field; typeof(this).tupleof)
    {
        pragma(msg, field.stringof);
    }

    static foreach(MemberType; typeof(typeof(this).tupleof)) {
        pragma(msg, MemberType);
    }
}

The output:

field1
field2
field3
int
int
int

I had to consult what I wrote years ago:

  http://ddili.org/ders/d.en/tuples.html#ix_tuples..tupleof

Ali

That seems to do the trick, I was really not expecting so much text just to get something so simple!

At the moment I'm trying to take variables with an attribute (rep) and then make a duplicate of them inside the struct. It seems to work. If I had duplicate names, it fails. However, the new fields don't appear to be showing up on a second enumeration:


    enum rep;
    struct multiplayerObject2
        {
        @rep ushort type;
        @("rep2") ushort type2;
        float x, y;
        
        static foreach(t; typeof(this).tupleof)
                {
                // no if rep/rep2 here, i'm just testing:
                pragma(msg, t.stringof); // does not see any new fields!
mixin("bool " ~ t.stringof ~ "25;"); // copy the fieldname with a suffix
                }

        pragma(msg, "-----separator-----");

        static foreach(t; typeof (this).tupleof) // again
                {
                pragma(msg, t.stringof); // does not see any new fields!
                }
        }


output
```
type
type2
x
y
-----separator-----
type
type2
x
y
```

However, if I do try to force the names to duplicate (say "type2") I get an error involving some sort of __anonymous subobject.
```
source/app.d-mixin-123(123,6): Error: variable `app.multiplayerObject2.__anonymous.type2` conflicts with variable `app.multiplayerObject2.type2` at source/app.d(116,19)
```

I also never realized you could put a static/static foreach inside the body of a struct (and not a function) so I'm still having trouble wrapping my head around that. Is it processing top-down?

Jonathan M Davis: Yeah, it does what I listed if you add the UDA to it.

Reply via email to