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