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