-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 strtr wrote: > == Quote from div0 (d...@users.sourceforge.net)'s article >> -----BEGIN PGP SIGNED MESSAGE----- >> Hash: SHA1 >> strtr wrote: >>> Or more to the point: >>> >>> Can (Class) template mixin functions be devirtualized by the compiler or do >>> I (as >>> optimization) need to manually copy paste the boiler plate code? >> You can just wrap the mixin in a final block: >> import std.stdio; >> template bar(T) { >> void test(T t) { >> writefln("t: %s", t); >> } >> } >> class foo { >> final { >> mixin bar!(int); >> } >> } >> int main(){ >> scope f = new foo; >> f.test(3); >> return 0; >> } > > Is that different from making all functions within the template final? >
Well it delegates the choice of virtual versus non virtual to the class using the mixin. No idea if that's a good idea or a bad one; I guess you'd have to think very carefully about what your mixin is trying to achieve. I just tried marking a function in the template final and that seems to work as well, so you could have a mix of virtual and non virtual in a template, but that feels like a hackish design. So you can it appears do this: (though that's dmd 2.028) template bar(T) { final: void test(T t) { writefln("t: %s", t); } void test2() { } } class foo { mixin bar!(int); } int main(){ foo f = new foo; f.test(3); f.test2(); return 0; } - -- 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/ iD8DBQFL9v4HT9LetA9XoXwRAgIvAKC8zwQP1EeaU/XkRijfm7m00nXqUQCdEdsN CV/vi6l5JGnqH5M2WXU6gjU= =0n7A -----END PGP SIGNATURE-----