[D.typesystem] Suggestion for improving OO inheritance models
Jacob Carlborg
doob at me.com
Thu Sep 2 01:17:21 PDT 2010
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<doob at me.com> wrote:
>> On 2010-09-01 22:44, Philippe Sigaud wrote:
>>>
>>> On Wed, Sep 1, 2010 at 18:13, retard<re at 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
More information about the Digitalmars-d
mailing list