Class info on interfaces

rumbu via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Aug 28 08:41:15 PDT 2015


On Friday, 28 August 2015 at 06:19:55 UTC, Jacob Carlborg wrote:
> On 2015-08-26 20:59, Adam D. Ruppe wrote:
>
>> Yes, exactly. COM and C++ things won't necessarily have a D 
>> TypeInfo
>> available and since interfaces can be them, it can't be sure.
>>
>> What I do there is to just cast the interface to Object. Then 
>> you should
>> check for null to cover those cases, then you can typeid or 
>> classinfo it.
>
> Is it possible to detect at compile time if an interface is not 
> a native D interface?
>
> Now when I think about it, we actually have four (!) different 
> kinds of interfaces. Native D, C++, Objective-C and COM.

I don't know about Objective-C, but:

- for native D interfaces __traits(getVirtualIndex, 
NativeInterface.firstFunction) == 1 since the first entry in vtbl 
is the contained object
- for C++ interfaces __traits(getVirtualIndex, 
CPPInterface.firstFunction) == 0
- COM interfaces: __traits(getVirtualIndex, 
CPPInterface.firstFunction) == 0 and inherit IUnknown

At runtime, it's simple, you have the m_flags member of 
TypeInfo_Class (isCPPclass, isCOMclass)



More information about the Digitalmars-d-learn mailing list