template mixin in class is virtual function?

div0 div0 at users.sourceforge.net
Fri May 21 14:41:27 PDT 2010


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

strtr wrote:
> == Quote from div0 (div0 at 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-----


More information about the Digitalmars-d-learn mailing list