On 2018-02-28 18:09:41 +0000, H. S. Teoh said:
Basically, the `alias f` is a catch-all template parameter that can
bind to basically anything that has a symbol. It's typically used to
bind to functions, delegates, and lambdas.
Aha... ok that makes it a bit more clear. So, if I have:
auto myFunc(alias f1, alias f2, alias f3, A)(auto ref A _a){...
I can use it like:
a.myFunc(
(myType) {...myCode...},
(myType) {...myCode...},
(myType) {...myCode...}
);
and the aliases just continue to collect whatever comes inside the
parameter specification. Does this idea hold? And it will give an error
if there are to few/many aliases/parameters?
Technically, the function is missing a sig constraint
How would that look like?
that verifies thatf is in fact a unary function. So it will fail to
compile if you pass
something other than a unary function in.
Ok, that's clearn.
This function can be called with code like this:
a.do((myType) {...myCode...});
Are you sure the function name is 'do'? Because that's a keyword, and I
don't think it's a valid identifier.
Well, it's just a bad picked word for my pseudo-code example... sorry.
do(a, (myType) {...myCode...});
Are you sure this actually works? Is there another overload that takes
a different parameter? The overload with `alias f`, AFAIK, can only be
called with a compile-time parameter, like this:
foo!((myType) { ... })(a);
// or:
a.foo!((myType) { ... });
I'm trying to better understand the D reactive framework rx:
https://github.com/lempiji/rx
This is the real code:
osStream().filter!(wm => wm.message == WM_CREATE).doSubscribe((winMsg
wm) {appInit();});
doSubscribe(osStream().filter!(wm => wm.message == WM_CREATE),
(winMsg wm) {appInit();});
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.
[...]
Are you sure there isn't an overload that takes a second parameter?
Doesn't look like this will compile, given the above declaration.
To be honste I'm not sure, I try to understand the code. It's the
rx.oberservable file.
Thanks a lot so far.
--
Robert M. Münch
http://www.saphirion.com
smarter | better | faster