template? mixin? template mixins? for modifying a struct setup

Steven Schveighoffer schveiguy at gmail.com
Fri May 20 00:29:40 UTC 2022


On 5/19/22 8:12 PM, Chris Katko wrote:
> On Thursday, 19 May 2022 at 10:35:30 UTC, ag0aep6g wrote:
>> On 19.05.22 12:15, Chris Katko wrote:
>>> given
>>> ```D
>>> struct COLOR
>>> {
>>> float r, g, b, a; // a is alpha (opposite of transparency)
>>> }
>>>
>>> auto red   = COLOR(1,0,0,1);
>>> auto green = COLOR(0,1,0,1);
>>> auto blue  = COLOR(0,0,1,1);
>>> auto white = COLOR(1,1,1,1);
>>> //etc
>>> ```
>>>
>>> is there a way to do:
>>> ```D
>>> auto myColor = GREY!(0.5);
>>> // where GREY!(0.5) becomes COLOR(0.5, 0.5, 0.5, 1.0);
>>> ```
>>
>> What's wrong with a simple plain function?
>>
>> COLOR grey(float rgb)
>> {
>>     return COLOR(rgb, rgb, rgb, 1);
>> }
>> auto myColor = grey(0.5);
> 
> Yeah that occurred to me as I was falling asleep. Though, do I have to a 
> specify
> 
> ```D
> static auto myColor = grey(0.5);
> ```
> to ensure it's done at compile time? It's not the end of the world, but 
> ideally, these are static / hardcoded values that can be used thousands 
> of times a second.

Given a CTFE function it's very easy to wrap for ensuring compile-time 
usage:

```d
enum ctGrey(float f) = grey(f);

auto myColor = ctGrey!(0.5);
```

-Steve


More information about the Digitalmars-d-learn mailing list