Thread overview | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
January 21, 2009 query interface | ||||
---|---|---|---|---|
| ||||
Hi All, can D check, whether a class A an Interface B supports? like: if (supports(class_A, intf_B)) { cast(intf_B) (class_A).hello(); } --Qian |
January 21, 2009 Re: query interface | ||||
---|---|---|---|---|
| ||||
Posted in reply to Qian Xu | Qian Xu wrote:
> Hi All,
>
> can D check, whether a class A an Interface B supports?
>
> like:
>
> if (supports(class_A, intf_B))
> {
> cast(intf_B) (class_A).hello();
> }
>
> --Qian
what I have found is:
if (is(class_A == intf_B))
{
cast(intf_B) (class_A).hello();
}
Is there any better one?
--Qian
|
January 21, 2009 Re: query interface | ||||
---|---|---|---|---|
| ||||
Posted in reply to Qian Xu | 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.
|
January 21, 2009 Re: query interface | ||||
---|---|---|---|---|
| ||||
Posted in reply to Qian Xu | On Wed, Jan 21, 2009 at 10:30 AM, Qian Xu <quian.xu@stud.tu-ilmenau.de> wrote:
> Hi All,
>
> can D check, whether a class A an Interface B supports?
>
> like:
>
> if (supports(class_A, intf_B))
> {
> cast(intf_B) (class_A).hello();
> }
At compile time, like Frits said, you can use is(class_A : intf_B).
At runtime, you can use cast(intf_B)someInstance. That returns 'null' if someInstance does _not_ inherit from intf_B.
if(auto i = cast(intf_B)instanceOfA)
i.hello();
|
January 21, 2009 Re: query interface | ||||
---|---|---|---|---|
| ||||
Posted in reply to Frits van Bommel | 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));
}
|
January 21, 2009 Re: query interface | ||||
---|---|---|---|---|
| ||||
Posted in reply to Qian Xu | Qian Xu schrieb:
> 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));
> }
Guess something like
bool supports(T, I) (T obj)
{
return (is(obj : I));
}
should do it.
|
January 21, 2009 Re: query interface | ||||
---|---|---|---|---|
| ||||
Posted in reply to Qian Xu | 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; > } |
Copyright © 1999-2021 by the D Language Foundation