Template explosion

Timothee Cour thelastmammoth at gmail.com
Tue Jul 16 20:34:03 PDT 2013


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?

C)
correction: above, it should be:
template a(T...)if(T.length==2 && is(T[1]==double)) {...}
which is quite verbose.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d-learn/attachments/20130716/03913bb7/attachment-0001.html>


More information about the Digitalmars-d-learn mailing list