Transparent cast from class to member pointer?

Robert M. Münch robert.muench at saphirion.com
Mon Apr 15 06:30:36 UTC 2019


On 2019-04-14 20:01:27 +0000, diniz said:

> Le 14/04/2019 à 20:03, Robert M. Münch via Digitalmars-d-learn a écrit :
>> struct IM;
>> struct C {
>>  IM *impl;
>> };
>> 
>> int cInit(C* self);
>> 
>> class I {
>>     C handler;
>> 
>>     this(){cInit(&handler);}
>> }
>> 
>> Is there a simple way that I can use handler without the address-of 
>> operator and automatically get *impl?
>> 
>> Something like:
>> 
>> class I {
>>     C handler;
>> 
>>     this(){cInit(handler);}
>> }
>> 
>> And later can use I in a way like this without having to define/write 
>> explicit casts everywhere?
>> 
>> someFunc(C* self);
>> 
>> I myI;
>> someFunc(myI);
> 
> Do you have a clear and correct view of what you want to express, of 
> the application? How does it look (for us), if you replace IM, C, impl, 
> cInit, I, handler, with meaningful (and correctly chosen) terms?

Well, ok... even it really doesn't matter a lot.

IM = Implementaiton Context (C-API)
C  = Core Context (C-API)
I  = Implementation D Class

The C side requires that *impl is the 1st member in the struct/class 
whereever it is stored. Hence, the wrapping in a struct and not 
directly putting it into a D class.

-- 
Robert M. Münch
http://www.saphirion.com
smarter | better | faster



More information about the Digitalmars-d-learn mailing list