www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Can this recursive template type with named type parameters be

reply aliak <something something.com> writes:
Hi, I'm playing around with a recursive template type that allows 
for named template parameters. The problem is that it requires a 
lot of repetition and becomes more error prone as the number of 
named arguments increase. So

1) Any ideas on how to make it less error prone? less repetition? 
a better way to do this?
2) Right now I can only have named optional parameters. Any ideas 
on how to make named required parameters (e.g. the first type 
parameter of Type).

Here's an example of a type that has one required parameter and 4 
optional named parameters:

private struct TypeImpl(
     T,
     string _arg0 = null,
     int _arg1 = 0,
     float _arg2 = 0,
     alias _arg3 = null,
) {
     alias Arg0 = _arg0;
     alias Arg1 = _arg1;
     alias Arg2 = _arg2;
     alias Arg3 = _arg3;
     public alias arg0(string value) = TypeImpl!(T, value, Arg1, 
Arg2, Arg3);
     public alias arg1(int value) = TypeImpl!(T, Arg0, value, 
Arg2, Arg3);
     public alias arg2(float value) = TypeImpl!(T, Arg0, Arg1, 
value, Arg3);
     public static template arg3(alias value) {
         alias arg3 = TypeImpl!(T, Arg0, Arg1, Arg2, value);
     }
}

public template Type(T) {
     alias Type = TypeImpl!(T);
}

void main() {
     void fun() {}
     alias U = Type!int
         .arg0!"string"
         .arg1!3
         .arg3!fun;
     pragma(msg, U);
}

Cheers,
- Ali
Oct 21 2018
parent Hakan Aras <hakan.aras live.at> writes:
On Sunday, 21 October 2018 at 21:23:35 UTC, aliak wrote:
 Hi, I'm playing around with a recursive template type that 
 allows for named template parameters. The problem is that it 
 requires a lot of repetition and becomes more error prone as 
 the number of named arguments increase. So

 1) Any ideas on how to make it less error prone? less 
 repetition? a better way to do this?
 2) Right now I can only have named optional parameters. Any 
 ideas on how to make named required parameters (e.g. the first 
 type parameter of Type).
I don't know if this is at all helpful, but I spent an hour on it, so I'm going to share it: https://pastebin.com/cGZwc649 You can wrap it in a template if you want to retain the ability to pass arguments without names. Regards, Hakan
Oct 21 2018