template mixin in class is virtual function?

strtr strtr at spam.com
Fri May 21 15:16:09 PDT 2010


== Quote from div0 (div0 at 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 ;)


More information about the Digitalmars-d-learn mailing list