Article: Writing Julia style multiple dispatch code in D
via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Wed Aug 30 23:58:53 PDT 2017
On Wednesday, 30 August 2017 at 23:34:10 UTC, Jean-Louis Leroy
wrote:
> On Wednesday, 30 August 2017 at 22:30:12 UTC, data pulverizer
> wrote:
>> On Wednesday, 30 August 2017 at 22:10:38 UTC, Jean-Louis Leroy
>> wrote:
>>> On Wednesday, 30 August 2017 at 21:30:29 UTC, data pulverizer
>>> wrote:
>>>> In the light of this I think your package just became more
>>>> interesting to me.
>>>
>>> I think that your work and mine are complementary :-)
>>
>> Here is one strange difference between inheriting from an
>> interface and a class:
>>
>> ```
>> interface Animal{}
>> class Dog: Animal{}
>> class Cat: Animal{}
>>
>>
>> void main()
>> {
>> Animal[] x;
>> x ~= new Cat();
>> x ~= new Dog();
>> x ~= new Cat();
>> writeln(typeid(x[0])); // Gives Animal
>> }
>> ```
>>
>> But if Animal is set to a class the typeid gives Cat, why does
>> this happen? Does this mean that inheriting from an interface
>> is not really polymorphism?
>
> I noticed that too. Still scratching my head.
The workaround is to cast to Object before getting the typeid.
The cause for this behavior is that if you have an interface
reference to an object it points to the interface vtbl and not to
the Object base class vtbl.
https://run.dlang.io/is/3IMrin
More information about the Digitalmars-d-announce
mailing list