-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Bill Baxter wrote: > On Thu, Aug 20, 2009 at 12:15 PM, div0<d...@users.sourceforge.net> wrote: >> -----BEGIN PGP SIGNED MESSAGE----- >> Hash: SHA1 >> >> John C wrote: >>> div0 Wrote: >>>> While we're on the subject, is it possible to mixin in a tuple? >>>> Doesn't seem like you can... >>>> >>>> class C(M...) { >>>> mixin M; >>>> } >>>> >>>> Doesn't work. >>> import std.typetuple; >>> >>> class C(M...) { >>> >>> mixin TypeTuple!(M); >>> >>> } >> Unfortunately that doesn't work. >> >> It stops the immediate compile error, but the mixin doesn't >> do anything: > > This doesn't work either: > > class C(M) { > mixin M; > } > template Foo() { void blarf() {} } > > auto x = new C!(Foo); > x.blarf; > > because a parameter that is itself a template needs to be an alias > template argument like so: > > class C(alias M) { ... } > > As far as I know you can't have an alias variadic argument or pass > template aliases to a regular variadic template arg. > > --bb
Yup, bit of a silly limitation. I found a way to do it using our old friend: string mixins class C(string mixins) { mixin (mixins); } auto c = new C!("mixin a; mixin b;"); It's bloody ugly though. I suppose you could add some compile time functions to clean up the arg list a bit so you could do: class C(string mixins) { mixin (CrackMixins!(mixins)); } new C!("a;b"); but it's not as convenient as MI and requires class C to be written with that use in mind. - -- My enormous talent is exceeded only by my outrageous laziness. http://www.ssTk.co.uk -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (MingW32) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iD8DBQFKjcKUT9LetA9XoXwRApBMAJ0bkFN9zFmxyIhgAUgKy1q8I3aScQCggr1Q UNLHcjpF/uXbwm7+CtzsDzk= =krsn -----END PGP SIGNATURE-----