get address of object if opCast is overridden

Artur Skawina art.08.09 at gmail.com
Sat Dec 1 03:05:49 PST 2012


On 12/01/12 03:48, Jonathan M Davis wrote:
> On Saturday, December 01, 2012 03:05:00 js.mdnq wrote:
>> Let O be an object with opCast overridden, then
>>
>>
>> writeln(O); //prints string
>> writeln(cast(void *)O)) // error, works fine if I comment out the
>> opCast override
>> writeln(&O) // address of pointer to O, not what I want.
>>
>> I want to compare a few objects based on their location. (I know
>> this is bad because of the GC, but I will probably pin them if I
>> go this route)
>>
>> It seems I have a difficult time getting the original behavior
>> when something is syntactically overridden in D. I understand the
>> point of cast(void *) not working when opCast is overridden but I
>> then do not know how to still get the address.
>>
>> Any Ideas?
> 
> For the moment, you're probably screwed. Certainly, if you overload opCast, 
> then none of the normal casts work any more, which is a definite bug:
> 
> http://d.puremagic.com/issues/show_bug.cgi?id=5747
> 
> So, unless there's a way to do it without a cast, you're stuck. And I have no 
> idea how you could possibly do it without a cast.

   *cast(void**)&O // assuming O is a class

artur


More information about the Digitalmars-d-learn mailing list