template parameters
Jarrett Billingsley
jarrett.billingsley at gmail.com
Fri Sep 25 17:10:09 PDT 2009
On Fri, Sep 25, 2009 at 6:48 PM, Ellery Newcomer
<ellery-newcomer at utulsa.edu> wrote:
> Christopher Wright wrote:
>> Ellery Newcomer wrote:
>>> Okay, let me rephrase that:
>>>
>>> When you have a <something> preceded by a colon in a template value
>>> parameter, what are its semantics? Is it the same as a default parameter
>>> value? Is it some sort of constraining expression? Is it a vestige?
>>
>> void foo(T : int)(T value)
>> {
>> // value is implicitly convertible to int
>> }
>>
>> It can do some pattern matching:
>>
>> void foo(T : V[U], V, U)(T dictionary)
>> {
>> // I have an associative array
>> }
>>
>> In D2, it's usually going to be easier to use constraints:
>>
>> template foo(T) if (isAssociativeArray!T) {}
>
> Great, it does something specified for a type parameter.
>
> Now what does it do for a VALUE parameter?
Specialization for particular values. It's not really that useful in
the face of static if.
template fib(int n : 0) { const fib = 1; }
template fib(int n : 1) { const fib = 1; }
template fib(int n) { const fib = fib!(n - 2) + fib!(n - 1); }
More information about the Digitalmars-d-learn
mailing list