Yeah, my mistake. I missread your post. :) But, you can use mixin expressions to add overloaded methods. E.g.:
import std.stdio; class Bar { void func() { writeln("Bar.func()"); } mixin("void func(string x) { writeln(x); }"); } void main() { Bar bar = new Bar; bar.func(); bar.func("test"); } So I'm wondering if there could be an easy way to use mixin expressions with mixin templates.. On Thu, Sep 2, 2010 at 10:17 AM, Jacob Carlborg <d...@me.com> wrote: > On 2010-09-01 23:39, Andrej Mitrovic wrote: >> >> You mean like this?: >> module add_virtual_functions; >> >> import std.stdio : writeln; >> >> void main() >> { >> test(); >> } >> >> mixin template Foo() >> { >> void func() >> { >> writeln("Foo.func()"); >> } >> } >> >> class Bar >> { >> void func() >> { >> writeln("Bar.func()"); >> } >> } >> >> class Code : Bar >> { >> mixin Foo; >> } >> >> void test() >> { >> Bar b = new Bar(); >> b.func(); // calls Bar.func() >> >> Code c = new Code(); >> c.func(); // calls Code.func() >> } >> > > No, that is overriding. Overloading is having several methods with the same > name taking different number of parameters or parameters of different types. > > module test; > > mixin template Foo () > { > void bar (int i) {}; > } > > class Bar > { > void bar () {}; > mixin Foo; > } > > void main () > { > auto bar = new Bar; > bar.bar(4); // line 17 > bar.bar(); > } > > The above code results in these errors: > > test.d(17): Error: function test.Bar.bar () is not callable using argument > types (int) > test.d(17): Error: expected 0 arguments, not 1 for non-variadic function > type void() > > >> On Wed, Sep 1, 2010 at 11:30 PM, Jacob Carlborg<d...@me.com> wrote: >>> >>> On 2010-09-01 22:44, Philippe Sigaud wrote: >>>> >>>> On Wed, Sep 1, 2010 at 18:13, retard<r...@tard.com.invalid> wrote: >>>> >>>> >>>> Have you taken a loot at Scala& traits already? It would be a great >>>> starting point. >>>> >>>> >>>> Scala's traits are great! Implicits in Scala are quite interesting too. >>>> Also, Haskell typeclasses >>>> >>>> I wonder if D can have part of Scala traits functionality with mixins? >>> >>> You can't use D template mixins to add methods that will overload >>> existing >>> methods. >>> >>> >>> -- >>> /Jacob Carlborg >>> > > > -- > /Jacob Carlborg >