Curious effect with traits, meta, and a foreach loop ... mystifies me.

Tejas notrealemail at gmail.com
Thu Sep 9 05:32:29 UTC 2021


On Tuesday, 7 September 2021 at 17:47:15 UTC, james.p.leblanc 
wrote:
> On Tuesday, 7 September 2021 at 17:33:31 UTC, Adam D Ruppe 
> wrote:
>> On Tuesday, 7 September 2021 at 17:24:34 UTC, james.p.leblanc 
>> wrote:
>>
>> If you want to do a runtime lookup, you need to separate the 
>> two pieces. This pattern works:
>>
>>
>> switch(runtime_index) {
>>    foreach(i, val; item.tupleof)
>>      case i:
>>            // use val
>> }
>>
>> So the switch is at runtime but the loop and cases are all 
>> known at compile time.
>
> Adam,
>
> Thanks for the very fast, and very thorough explanation.  I 
> especially
> appreciate the fact that you seem to have predicted where my 
> thoughts
> were heading with my experiments ...
>
> The "switch(runtime_index)" snippet will come in handy ...
>
> What I would **REALLY** like is to be able to do (but I think 
> this is
> impossible) would be to "dig out" the needed "x" array 
> depending on
> which one of them suits my alignment needs.  (Yes, I am still 
> playing
> with avx2 ideas ...).
>
> What I mean by "dig out" the needed "x" is:  if I could 
> alias/enum/
> or someother  trick be then able just to use that "x" as a 
> simple static array.
>
> (I doubt this is possible ... but .... ?).
>
> Thanks again, Keep Warm in Upstate!
> James

from what I understand you want to change the aligned data that 
you're referring to at runtime.
```d
void main()
{
     import std.experimental.allocator.mallocator;
     import std.stdio: write, writeln, writef, writefln, readf;
     uint alignment, length;

     readf!"%u %u"(length,alignment);

     auto buffer = 
AlignedMallocator.instance.alignedAllocate(length,
         alignment);
     writeln(&buffer[0]);
     scope(exit) AlignedMallocator.instance.deallocate(buffer);
     //...


}
```

Is this it?


More information about the Digitalmars-d-learn mailing list