Thread overview |
---|
May 19, 2010 template mixin in class is virtual function? | ||||
---|---|---|---|---|
| ||||
Will template-mixin-functions always be virtual in classes? "Mixins can add virtual functions to a class" http://www.digitalmars.com/d/1.0/template-mixin.html related: http://odefu.blogspot.com/2008/12/composite-oriented-programming.html |
May 21, 2010 Re: template mixin in class is virtual function? | ||||
---|---|---|---|---|
| ||||
Posted in reply to strtr | 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? |
May 21, 2010 Re: template mixin in class is virtual function? | ||||
---|---|---|---|---|
| ||||
Posted in reply to strtr Attachments: | 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; } - -- My enormous talent is exceeded only by my outrageous laziness. http://www.ssTk.co.uk |
May 21, 2010 Re: template mixin in class is virtual function? | ||||
---|---|---|---|---|
| ||||
Posted in reply to div0 | == Quote from div0 (div0@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?
|
May 21, 2010 Re: template mixin in class is virtual function? | ||||
---|---|---|---|---|
| ||||
Posted in reply to strtr Attachments: | strtr wrote: > == Quote from div0 (div0@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 |
May 21, 2010 Re: template mixin in class is virtual function? | ||||
---|---|---|---|---|
| ||||
Posted in reply to div0 | == Quote from div0 (div0@users.sourceforge.net)'s article > strtr wrote: > > 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; > } I've been marking functions final on a per function basis within the templates but after reading the docs I was afraid the compiler might just ignore the attribute and make all mixin-template-functions virtual. "Mixins can add virtual functions to a class" http://www.digitalmars.com/d/1.0/template-mixin.html But that sentence was probably meant as an example not the exclusive description :) Anyway, Thanks!! Shouldn't be thinking about optimization anyways ;) |
Copyright © 1999-2021 by the D Language Foundation