digitalmars.D.learn - query interface
- Qian Xu (8/8) Jan 21 2009 Hi All,
- Qian Xu (8/20) Jan 21 2009 what I have found is:
- Frits van Bommel (5/12) Jan 21 2009 if (is(class_A : intf_B))
- Qian Xu (8/21) Jan 21 2009 Thanks. Could you tell me, how to make a function for this? I do not kno...
- Jarrett Billingsley (6/13) Jan 21 2009 At compile time, like Frits said, you can use is(class_A : intf_B).
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
Jan 21 2009
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(); } --Qianwhat I have found is: if (is(class_A == intf_B)) { cast(intf_B) (class_A).hello(); } Is there any better one? --Qian
Jan 21 2009
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.
Jan 21 2009
Frits van Bommel wrote:Qian Xu wrote: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)); }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.
Jan 21 2009
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.
Jan 21 2009
Reply to Qian,Frits van Bommel wrote:GivenQian Xu wrote: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)); }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.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 thisnull !is cast(I)c1if you want it in a functionbool IsA(TI, TC)(TC c) { return null !is cast(TI)c; }
Jan 21 2009
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();
Jan 21 2009