How to pass default arguments in a compile time sequence?
Victor Porton
porton at narod.ru
Fri Mar 1 19:14:11 UTC 2019
On Friday, 1 March 2019 at 18:52:58 UTC, Dukc wrote:
> On Friday, 1 March 2019 at 17:55:50 UTC, Victor Porton wrote:
>> I have a string mixin, such that
>>
>> mixin StructParams!("S", int, "x", float, "y");
>>
>> creates
>>
>> struct S {
>> struct Regular {
>> int x;
>> float y;
>> }
>> struct WithDefaults {
>> Nullable!int x;
>> Nullable!float y;
>> }
>> }
>>
>> Now I want to enhance StructParams to be able to pass default
>> initializers (like `float y = 2.1;`). What "format" for the
>> template arguments would you suggest to be able to either pass
>> or not to pass default initializers (like 2.1) for each of the
>> fields of the structs?
>
> One where you pass the default value in place of where you
> would declare the type if you don't want to pass the value. So
> that the above declaration with float y having a default value
> would be:
>
> mixin StructParams!("S", int, "x", 2.1f, "y");
>
> Define StructParams template so that infer type of y from type
> of the expression.
To infer the value of the field from the literal seems an
interesting idea. However I was more inclined to do something
like:
mixin StructParams!("S", int, "x", float, "y", 2.1f);
This seems more readable. Isn't it?
> But I suggest the one above only if you are willing to put a
> good deal of thought in implementing StructParams template. It
> won't be the easiest of tasks. If you're doing something
> quick-and-dirty, I would probably just define a function that
> constructs S with appopriate "default" values.
I am going to do this work thoroughly and quality. So I am
willing to invest time into this task.
More information about the Digitalmars-d
mailing list