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