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

Reply via email to