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