Passing anonymous templated functions as template parameters

Basile B. via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Jun 15 21:15:07 PDT 2016


On Wednesday, 15 June 2016 at 23:52:56 UTC, Basile B. wrote:
> On Wednesday, 15 June 2016 at 22:27:38 UTC, pineapple wrote:
>> Here's a simple code example to illustrate what I expected to 
>> work and didn't - is this a mistake in my syntax or a 
>> limitation of the language?
>>
>>     template SomeTemplate(alias func){
>>         auto templatefunc(T)(int x){
>>             return func!T(x);
>>         }
>>     }
>>
>>     // Valid
>>     auto somefunc(T)(int x){
>>         return cast(T) x;
>>     }
>>     alias fn1 = SomeTemplate!somefunc;
>>
>>     // Not valid
>>     alias fn2 = SomeTemplate!(
>>         (T)(int x){return cast(T) x;}
>>     );
>
> This syntax passes:
>
>     alias fn2(T) = SomeTemplate!((int x){return cast(T) x;});

I didn't try to instanciate previously. It works a bit with a 
lambda to the
extent that the alias has the template parameter list.

import std.stdio;

template A(alias func)
{
     auto a(T)(int x)
     {
         return func!T(x);
     }
}

alias spec(T) = A!(x => (cast(T) x));

void main(string[] args)
{
     writeln((spec!byte).a!int(257)); // 1
}


More information about the Digitalmars-d-learn mailing list