On 2/28/18 12:47 PM, 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?

unaryFun is a template that returns a callable item. It could be a struct with an opCall, it could be a function template, it could be an alias to a real function, it could be a function pointer, delegate, etc.

It also supports string lambdas, which existed before our current lambda syntax.

i.e. alias f = unaryFun!"a - 5";
assert(f(10) == 5);



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.

This question is a little harder to understand. Perhaps you have real code that shows what you are confused about?

-Steve

Reply via email to