Template explosion
JS
js.mdnq at gmail.com
Tue Jul 16 20:43:24 PDT 2013
On Wednesday, 17 July 2013 at 03:34:17 UTC, Timothee Cour wrote:
> On Tue, Jul 16, 2013 at 8:29 PM, Timothee Cour
> <thelastmammoth at gmail.com>wrote:
>
>> On Tue, Jul 16, 2013 at 7:52 PM, JS <js.mdnq at gmail.com> wrote:
>>
>>>
>>> It seems that one must use two templates to process built in
>>> times and
>>> strings
>>>
>>> template A(string a) { ... }
>>> template A(a) { enum A = A(typeof(a).stringof); }
>>>
>>> This is so we can do stuff like A!(double) and A!("double").
>>>
>>> The problem is when we have many parameters the number of
>>> permutations
>>> increases exponentially.
>>>
>>> Is there a better way to unify the two?
>>>
>>
>> template a(T...)if(T.length==1){
>> enum a=1;
>> }
>> void main(){
>> auto a1=a!double;
>> auto a2=a!"double";
>> }
>>
>> However:
>> This syntax sucks.
>> Why not support the following syntax:
>> template a(auto T) {...}
>> with same semantics?
>>
>> Because this is problematic with more arguments:
>> I'd like this:
>> template a(auto T1, double T2){...}
>>
>> but instead have to do that:
>> template a(T...)if(is(T[1]==double)) {...}
>> and it gets quickly more complicated
>>
>>
> A)
> actually, I'm not sure if auto would be the best keyword here,
> but maybe
> another keyword.
>
> B)
> What's the rationale why alias can't match to a primitive type
> in the first
> place?
>
I think this is the real problem, else it would be rather easy. I
don't mind writing static if's for each argument as that's linear.
> C)
> correction: above, it should be:
> template a(T...)if(T.length==2 && is(T[1]==double)) {...}
> which is quite verbose.
More information about the Digitalmars-d-learn
mailing list