query interface

BCS ao at pathlink.com
Wed Jan 21 11:50:14 PST 2009


Reply to Qian,

> Frits van Bommel wrote:
> 
>> Qian Xu wrote:
>> 
>>> Hi All,
>>> 
>>> can D check, whether a class A an Interface B supports?
>>> 
>>> like:
>>> 
>>> if (supports(class_A, intf_B))
>>> 
>> if (is(class_A : intf_B))
>> tests if 'class_A' is implicitly convertible to 'intf_B'. If the
>> first
>> is a class and the second an interface, that's equivalent to the
>> class
>> implementing the interface.
> Thanks. Could you tell me, how to make a function for this? I do not
> know how to pass an Interface as parameter.
> 
> like
> bool supports(T)(T obj, interface_type t)
> {
> return (is(obj : t));
> }

Given 

> interface I {}
> class C1 {}
> class C2 : C1, I {}
> class C3 : C1 {}

if you want to check if an instance of C1 is a derived class that implements 
I use this

> null !is cast(I)c1

if you want it in a function

> bool IsA(TI, TC)(TC c)
> {
>   return null !is cast(TI)c;
> }




More information about the Digitalmars-d-learn mailing list