On 2018-05-21 18:55:36 +0000, Steven Schveighoffer said:

So the issue here is that the lambda function inside myFunc is DIFFERENT than the one inside b. They are both the same function, but with essentially different names.

Aha... that explains it pretty good.

When you use the alias, both are using the same exact lambda.

Ok. I didn't expect that the name is relevant in this case, instead assumed that only the types need to match.

I see you are casting now as well,

Do I? Not that I'm aware of it in my pseudo-code example...


What may make more sense (both for type sanity and for code reuse) is to wrap your call to filter into one place so it can be used wherever you need it:

auto wrapStream(S)(S str) { return str.filter!(x => x == myMessage); }

class b
{
    typeof(wrapStream(a.init.myStream)()) mySubStream;
}

void myFunc() {
    a myA = new a;
    b myB = new b;
    myB.mySubstream = myA.myStream.wrapStream;
}

This would require one wrap function per different lambda, right? Assume I have 50-100 of these. Maybe the myMessage value can be given as parameter and with this becomes more like a "filter factory". Not sure if this would work.

--
Robert M. Münch
http://www.saphirion.com
smarter | better | faster

Reply via email to