Thread overview | ||||||
---|---|---|---|---|---|---|
|
January 22, 2009 How to get the implementer of an interface? | ||||
---|---|---|---|---|
| ||||
Hello All, how to get the implementer of an interface? Here is an example: ------------------------------------------------------------- interface intf_1 {} class c_1 : intf_1 {} class c_2 : c_1 {} c_1 aaa = new c_1; c_2 bbb = new c_2; auto list = [cast(intf_1)(bbb), cast(intf_1)(aaa)]; foreach (intf_1 i; list) { print_intf_implementor(i); // bbb should return "c_2" // aaa should return "c_1" } ------------------------------------------------------------- --Qian |
January 22, 2009 Re: How to get the implementer of an interface? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Qian Xu |
Qian Xu wrote:
> Hello All,
>
> how to get the implementer of an interface?
>
> Here is an example:
> -------------------------------------------------------------
> interface intf_1 {}
> class c_1 : intf_1 {}
> class c_2 : c_1 {}
>
> c_1 aaa = new c_1;
> c_2 bbb = new c_2;
> auto list = [cast(intf_1)(bbb), cast(intf_1)(aaa)];
> foreach (intf_1 i; list)
> {
> print_intf_implementor(i);
> // bbb should return "c_2"
> // aaa should return "c_1"
> }
> -------------------------------------------------------------
>
>
> --Qian
I don't think you can. i.classinfo returns intf_1's ClassInfo. Also, the only two bits of hidden information on an object are the monitor object and the vtable, so I don't know that you could use those, either.
Of course, I could be wrong.
-- Daniel
|
January 22, 2009 Re: How to get the implementer of an interface? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Qian Xu | On Thu, 22 Jan 2009 11:17:20 +0300, Qian Xu <quian.xu@stud.tu-ilmenau.de> wrote:
> Hello All,
>
> how to get the implementer of an interface?
>
> Here is an example:
> -------------------------------------------------------------
> interface intf_1 {}
> class c_1 : intf_1 {}
> class c_2 : c_1 {}
>
> c_1 aaa = new c_1;
> c_2 bbb = new c_2;
> auto list = [cast(intf_1)(bbb), cast(intf_1)(aaa)];
> foreach (intf_1 i; list)
> {
> print_intf_implementor(i);
> // bbb should return "c_2"
> // aaa should return "c_1"
> }
> -------------------------------------------------------------
>
>
> --Qian
Try the following:
writefln(cast(Object)i);
|
January 22, 2009 Re: How to get the implementer of an interface? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Denis Koroskin | Denis Koroskin wrote: > On Thu, 22 Jan 2009 11:17:20 +0300, Qian Xu <quian.xu@stud.tu-ilmenau.de> wrote: > >> how to get the implementer of an interface? [snip] > > Try the following: > > writefln(cast(Object)i); Or writefln((cast(Object)i).classinfo.name); if you want the class name, not the result of toString (which is only the class name if it hasn't been overridden). |
Copyright © 1999-2021 by the D Language Foundation