passing member.member alias to mixin template
Eric_DD via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun Sep 3 11:54:49 PDT 2017
I am running into something that seems a bit inconsistent.
When I pass an alias of a member to a mixin it works, but a
member to member doesn't.
It seems like the alias is evaluated to the last symbol before
passing it to the mixin.
If that's true, is there a way to defer the evaluation?
Anyway, better look at this code:
*** This works:
struct Array {
void foo() { writeln("foo"); }
}
mixin template arrayOperations(arrays...) {
void foo() {
foreach(ref a; arrays) a.foo();
}
}
class Thing {
Array data1;
Array data2;
mixin arrayOperations!(data1, data2);
}
int main(string[] argv) {
new Thing().foo();
return 0;
}
***
But if I wrap Array in a S, then I get a "need this for data of
type Array"
Is there a way (without an alias this in S) to get the following
working?
*** Non working code:
struct Array {
void foo() { writeln("foo"); }
}
struct S {
Array data;
}
mixin template arrayOperations(arrays...) {
void foo() {
foreach(ref a; arrays) a.foo(); // error: "need this for
data of type Array"
}
}
class Thing {
S s1;
S s2;
mixin arrayOperations!(s1.data, s2.data);
}
int main(string[] argv) {
new Thing().foo();
return 0;
}
More information about the Digitalmars-d-learn
mailing list