monarch_dodra already answered, but since, I typed this, I may as well post it :)
On Sun, Sep 23, 2012 at 8:49 PM, comco <[email protected]> wrote: > For this program I'm getting an "Error: need 'this' to access member x" at > line (*). Does that mean that we cannot alias a property as an argument of a > template mixin? By using s.x, you're not referencing the property, but directly the value s.x, which is known only at runtime: it cannot be a template argument. If x where a static member, you could probably use it, hence the error message (need 'this', ...). > So, using string mixins works, but explicit alias to the property name seems > not to. Why is that? a.stringof can be obtained for any symbol a, so s.x (or with(s) ... x) just gives "s.x", which can be mixed in. It's transformed into a string, transformation for which there is no need for 'this'. > and is there any other way of achieving the result > witout using template mixins Sorry but... what result? Referencing a member inside a template? Remember templates can be in another module, written years ago. If you really want a template to act on a local value, either use a mixin template, as you did, or reference the member by its name as a string: import std.stdio; mixin template T(string member) { void f() { mixin("writeln(" ~ member ~ ");"); } } struct S { int x; } void main() { auto s = S(4); mixin T!("s.x"); f(); } // prints 4 I see monarch proposed exactly the same way to do it...
