On 2018-05-20 14:49:59 +0000, Jonathan M Davis said:
In cases like this, typeof is your friend. e.g. something like
typeof(myStream.filter!(a => a == myMessage)) mySubStream;
Hi Jonathan, great! This got me a step further. So I can declare my
member now. But I get an implict cast error when I try:
class a {
... myStream;
}
class b {
typeof(a.myStream.filter!(x => x == myMessage)) mySubStream;
}
void myFunc() {
a myA = new a();
b myB = new b();
myB.mySubstream = myA.myStream.filter!(x => x == myMessage);
}
This gives (unnecessary stuff stripped):
Error: cannot implicitly convert expression filter(...) of type
app.myFunc.filter!(x => x == myMessage) to app.b.filter!(x => x ==
myMessage)
Why is myFunc now entering the game? I mean it's just the function
containing the code. It seems that:
typeof(myA.myStream.filter!(x => x == myMessage))
and
typeof(a.myStream.filter!(x => x == myMessage)) are not the same.
But inside class b I can't use a specific variable instance. And in
myFunc, I can't use a class type but need the specific instance.
Any further idea?
though you might have trouble with the lambda being subtly different type
even if you replace myMessage in it with something that will work in the
scope that mySubStream is being declared.
Not sure if the above problem is exactly what you mention here. This is
all pretty tricky.
However, that could be fixed by
doing something like replacing the lambda with a free function or just
creating a function that returns what you want to assign to mySubStream.
Then you could just do something like
typeof(myHelperFunc(myStream)) mySubStream;
The exact solution can get a bit annoying in cases like this (it's arguably
the biggest downside to auto returns), but typeof does provide a way out if
you can get the expression to it to work. It is easier with local variables
than member variables though, since you don't necessarily have everything
you want to use in the expression that will give the variable its value
available at the point that the variable is declared - but that's why
a helper function can help, since it provides a way to encapsulate the
expression and reuse it between the assignment and the declaration.
Not sure I understand every aspect but it's getting clearer... Thanks so far.
--
Robert M. Münch
http://www.saphirion.com
smarter | better | faster