get address of object if opCast is overridden

js.mdnq js_adddot+mdng at gmail.com
Sat Dec 1 04:31:12 PST 2012


On Saturday, 1 December 2012 at 11:06:02 UTC, Artur Skawina wrote:
> 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

Duh! I should have been able to think of that ;/

Thanks.



More information about the Digitalmars-d-learn mailing list