template/mixin magic for to! auto inferring type from variable

kdevel kdevel at vogtner.de
Sat Feb 3 13:08:12 UTC 2024


On Saturday, 3 February 2024 at 02:20:13 UTC, Paul Backus wrote:
> On Friday, 2 February 2024 at 23:25:37 UTC, Chris Katko wrote:
>> The auto solution won't work for a struct however which I'm 
>> using:
>>
>> ```D
>> struct procTable{ //contains all the fields inside a file I'm 
>> parsing
>>    uint time;
>>    int priority;
>>    string name;
>>    // etc
>>    }
>> ```
>
> Maybe you can use `typeof` in that case?
>
> ```d
> procTable pt;
> pt.time = to!(typeof(pt.time))(data[1]);
> // etc
> ```
>
> ...although I guess then you're repeating the field name, which 
> isn't great either.

```d
struct ProcTable2 {
    uint time;
    int priority;
    string name;

    this (string [this.tupleof.length] initializers)
    {
       import std.conv;
       static foreach (i, field; this.tupleof)
          field = initializers [i].to!(typeof (field));
    }
}

unittest {
    string [3] initializers = ["100", "-5", "foobar"];
    auto pt2 = ProcTable2 (initializers);
    with (pt2) {
       assert(time == 100);
       assert(priority == -5);
       assert(name == "foobar");
    }
}
```


More information about the Digitalmars-d-learn mailing list