On 01/20/2012 08:43 AM, Jerome BENOIT wrote:

>>>>> -----------------------------------------------------------------
>>>>> T[] find(alias pred, T)(T[] input)
>>>>> if (is(typeof(pred(input[0])) == bool)) {
>>>>> for(; input.length > 0; input = input[1 .. $]) {
>>>>> if (pred(input[0])) break;
>>>>> }
>>>>> return input;
>>>>> }
>>>>> -----------------------------------------------------------------

> Let assume that the predicate must have now two parameters in such a way
> that
> the first is of type T and the second of type TM.
>
> auto ff = find!((x, m) { return x % m != 0; })([1, 2, 3, 4, 5]);
>
> Here x would be of type T, and m of type TM.
>
>
> What does look the code for find then ?

We must decide on what 'm' is on the find() line above. Do you want to provide it as a template parameter or a function parameter? Here is how it could be provided as a function parameter (the last '2' in the parameter list):

    auto ff = find!((x, m) { return x % m != 0; })([1, 2, 3, 4, 5], 2);

And here is a matching find() function template:

T[] find(alias pred, T, TM)(T[] input, TM m)
    if (is(typeof(pred(input[0], m)) == bool))
{
    for(; input.length > 0; input = input[1 .. $]) {
        if (pred(input[0], m)) break;
    }

    return input;
}

void main()
{
    auto ff = find!((x, m) { return x % m != 0; })([1, 2, 3, 4, 5], 2);
}

Notice that pred() now takes two parameters in find().

>
> Thanks in advance,
> Jerome
>
>>
>

Philippe Sigaud's template document covers everything about templates:

  https://github.com/PhilippeSigaud/D-templates-tutorial

(Just download the pdf there.)

I have a chapter about templates which intentionally covers little, leaving the rest of templates to a later chapter:

  http://ddili.org/ders/d.en/templates.html

The problem is, 'alias' template parameters are in that later chapter, which hasn't been translated yet.

Ali

Reply via email to