digitalmars.D - How to pass default arguments in a compile time sequence?
- Victor Porton (18/18) Mar 01 2019 I have a string mixin, such that
- Dukc (12/30) Mar 01 2019 One where you pass the default value in place of where you would
- Victor Porton (8/43) Mar 01 2019 To infer the value of the field from the literal seems an
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?
Mar 01 2019
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. 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.
Mar 01 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: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?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.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.
Mar 01 2019