www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - casting interface to void*

reply "Ben Hinkle" <ben.hinkle gmail.com> writes:
Walter, given an interface reference x can we make cast(void*)x actually 
perform cast(void*)cast(Object)x? Similarly casting from void* to an 
interface X would actually perform cast(X)cast(Object). That way interfaces 
could be used as keys to assoc arrays and in general it would make 
interfaces operate more uniformly with objects. Plus it would then be true 
that
  Object obj = x;
  cast(void*)x === cast(void*)obj;
May 09 2005
parent reply "Walter" <newshound digitalmars.com> writes:
"Ben Hinkle" <ben.hinkle gmail.com> wrote in message
news:d5p4sc$6dk$1 digitaldaemon.com...
 Walter, given an interface reference x can we make cast(void*)x actually
 perform cast(void*)cast(Object)x? Similarly casting from void* to an
 interface X would actually perform cast(X)cast(Object). That way

 could be used as keys to assoc arrays and in general it would make
 interfaces operate more uniformly with objects. Plus it would then be true
 that
   Object obj = x;
   cast(void*)x === cast(void*)obj;

I'm uneasy about doing that because then that removes the ability to just know what the actual pointer is.
May 10 2005
parent reply "Ben Hinkle" <bhinkle mathworks.com> writes:
"Walter" <newshound digitalmars.com> wrote in message 
news:d5r00o$1m66$1 digitaldaemon.com...
 "Ben Hinkle" <ben.hinkle gmail.com> wrote in message
 news:d5p4sc$6dk$1 digitaldaemon.com...
 Walter, given an interface reference x can we make cast(void*)x actually
 perform cast(void*)cast(Object)x? Similarly casting from void* to an
 interface X would actually perform cast(X)cast(Object). That way

 could be used as keys to assoc arrays and in general it would make
 interfaces operate more uniformly with objects. Plus it would then be 
 true
 that
   Object obj = x;
   cast(void*)x === cast(void*)obj;

I'm uneasy about doing that because then that removes the ability to just know what the actual pointer is.

When would a D program need that? Can't they reconstruct the pointer from the classinfo if they really want to know the interface offset? If an interface is another view on an object one would imagine having the same pointer for the Object view as for the interface views would be desirable. The fact that interfaces require different pointers should be an implementation detail not visible to the user (preferably).
May 10 2005
parent "Walter" <newshound digitalmars.com> writes:
"Ben Hinkle" <bhinkle mathworks.com> wrote in message
news:d5r23j$1obd$1 digitaldaemon.com...
 "Walter" <newshound digitalmars.com> wrote in message
 news:d5r00o$1m66$1 digitaldaemon.com...
 I'm uneasy about doing that because then that removes the ability to


 know what the actual pointer is.

When would a D program need that?

I need it when debugging <g>. D needs to support ways to get at the underlying representation of things. The void* cast is how that's done with references.
 Can't they reconstruct the pointer from
 the classinfo if they really want to know the interface offset? If an
 interface is another view on an object one would imagine having the same
 pointer for the Object view as for the interface views would be desirable.
 The fact that interfaces require different pointers should be an
 implementation detail not visible to the user (preferably).

But it's an important detail. I think the functionality you need is supported with the cast(Object).
May 10 2005