typeid() broken for interfaces?

Maxim Fomin maxim at maxim-fomin.ru
Mon Dec 3 06:41:31 PST 2012


On Monday, 3 December 2012 at 13:50:45 UTC, Jacob Carlborg wrote:
> On 2012-12-03 11:20, Paulo Pinto wrote:
>
>> When coding against interfaces, it is always a good decision 
>> not to try
>> to get back the object.
>>
>> The main idea about using interfaces in first place is to have 
>> behavior
>> independent of whatever class might implement it. If someone 
>> is trying
>> to get back the implementation of a given interface, it is 
>> because the
>> design is not sound in first place.
>
> Well, one would might think that this would work:
>
> interface I {}
>
> class A : I {}
>
> void main ()
> {
>     I i = new A;
>     Object o = i;
> }
>
> But it doesn't.

Object does not implement interface I, so why should interface 
instance be implicitly converted to it? It even should not be 
implicitly convertible to class if that class implements 
interface. However it is possible to use cast.

TDPL and dlang.org say almost nothing about it, but current 
investigated dmd behavior (http://dpaste.dzfl.pl/84637416) makes 
sense: it allows convenient conversion when it should happen, 
protects from poor implicit conversion which should not happen, 
but still allows to do what you want if you assume you are right. 
If you not, dmd punish you with segfault.




More information about the Digitalmars-d mailing list