Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
March 24, 2006 Implicit fn template instantiation | ||||
---|---|---|---|---|
| ||||
Can someone explain why I can't instantiate this template implicitly andor comment on whether I'm overlooking a better way to accomplish what this template does? template increment(T, K) { void increment(T[K] association, K key) { if(key in association) { association[key]++; } else { association[key] = 1; } } } Thanks, Anthony |
March 24, 2006 Re: Implicit fn template instantiation | ||||
---|---|---|---|---|
| ||||
Posted in reply to anthony.difranco | anthony.difranco@yale.edu wrote:
> Can someone explain why I can't instantiate this template implicitly andor
> comment on whether I'm overlooking a better way to accomplish what this template
> does?
Mostly because ITI is still incomplete. Anything beyond strict type replacement doesn't really work.
Sean
|
March 24, 2006 Re: Implicit fn template instantiation | ||||
---|---|---|---|---|
| ||||
Posted in reply to anthony.difranco | In article <dvvk0i$2tum$1@digitaldaemon.com>, anthony.difranco@yale.edu says... > >Can someone explain why I can't instantiate this template implicitly andor comment on whether I'm overlooking a better way to accomplish what this template does? > >template increment(T, K) >{ >void increment(T[K] association, K key) >{ >if(key in association) >{ >association[key]++; >} >else >{ >association[key] = 1; >} >} >} > >Thanks, >Anthony > > IIRC if(T* val = (key in association)) (*val)++; else association[key]=1; haven't tried it but it should work |
March 24, 2006 Re: Implicit fn template instantiation | ||||
---|---|---|---|---|
| ||||
Posted in reply to BCS | BCS wrote:
> In article <dvvk0i$2tum$1@digitaldaemon.com>, anthony.difranco@yale.edu says...
>> Can someone explain why I can't instantiate this template implicitly andor
>> comment on whether I'm overlooking a better way to accomplish what this template
>> does?
>>
>> template increment(T, K)
>> {
>> void increment(T[K] association, K key)
>> {
>> if(key in association)
>> {
>> association[key]++;
>> }
>> else
>> {
>> association[key] = 1;
>> }
>> }
>> }
>>
>> Thanks,
>> Anthony
>>
>>
>
> IIRC
>
> if(T* val = (key in association))
> (*val)++;
> else
> association[key]=1;
>
> haven't tried it but it should work
Yes. A full working version with the current limited IFTI would look like:
template increment(T,K) {
static assert(is(K : typeof(T.init.keys[0])));
void increment(inout T association, K key) {
if(auto val = (key in association))
(*val)++;
else
association[key]=1;
}
}
/Oskar
|
March 27, 2006 Re: Implicit fn template instantiation | ||||
---|---|---|---|---|
| ||||
Posted in reply to Oskar Linde | Thanks; it works. In article <e00fq4$131r$1@digitaldaemon.com>, Oskar Linde says... > >BCS wrote: >> In article <dvvk0i$2tum$1@digitaldaemon.com>, anthony.difranco@yale.edu says... >>> Can someone explain why I can't instantiate this template implicitly andor comment on whether I'm overlooking a better way to accomplish what this template does? >>> >>> template increment(T, K) >>> { >>> void increment(T[K] association, K key) >>> { >>> if(key in association) >>> { >>> association[key]++; >>> } >>> else >>> { >>> association[key] = 1; >>> } >>> } >>> } >>> >>> Thanks, >>> Anthony >>> >>> >> >> IIRC >> >> if(T* val = (key in association)) >> (*val)++; >> else >> association[key]=1; >> >> haven't tried it but it should work > >Yes. A full working version with the current limited IFTI would look like: > >template increment(T,K) { > static assert(is(K : typeof(T.init.keys[0]))); > void increment(inout T association, K key) { > if(auto val = (key in association)) > (*val)++; > else > association[key]=1; > } >} > > >/Oskar |
Copyright © 1999-2021 by the D Language Foundation