On Wednesday, 28 February 2018 at 17:47:22 UTC, Robert M. Münch wrote:
Hi, I'm lost reading some code:

A a;

auto do(alias f, A)(auto ref A _a){
        alias fun = unaryFun!f;
        return ...
        ...
}

How is this alias stuff working? I mean what's the type of f? Is it an anonymous function which then gets checked to be unary? How is it recognized in the code using the function template?


This function can be called with code like this:

a.do((myType) {...myCode...});
do(a, (myType) {...myCode...});

What's wondering me here is that the template function only has one paraemter (_a) but I somehow can get my myCode into it. But the code looks like a parameter to me. So why isn't it like:

auto do(alias f, A)(auto ref A _a, ??? myCode){...

I'm a bit confused.

Testing this with:

auto foo(alias f, A)(auto ref A a) { return f(a); }

I can call foo either like this:

foo!(x => x + x)(1);
or
1.foo!(x => x + x);

but these will give errors

foo(1, x => x + x); //Error
1.foo(x => x + x); // Error

I don't see how you can get that kind of behavior...


Reply via email to