digitalmars.D.learn - Can this recursive template type with named type parameters be
- aliak (45/45) Oct 21 2018 Hi, I'm playing around with a recursive template type that allows
- Hakan Aras (8/17) Oct 21 2018 I don't know if this is at all helpful, but I spent an hour on
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
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