Adding a new design constraint to D

bauss jj_1337 at live.dk
Tue Jun 14 12:09:57 UTC 2022


On Tuesday, 14 June 2022 at 11:04:55 UTC, The Zealot wrote:
> On Tuesday, 14 June 2022 at 10:50:56 UTC, bauss wrote:
>> On Tuesday, 14 June 2022 at 10:21:34 UTC, The Zealot wrote:
>>>
>>> a) put the class in it's own module.
>>>
>>
>> No you really can't and I already proved that with a couple 
>> examples in the other discussions on this topic; there are 
>> situations where you cannot do that, such as accessing private 
>> fields on a parent class using a sub class type within the 
>> parent class' module.
>>
>> That's why the module-level private is a lie in D or at least 
>> incomplete.
>
> The code you posted works exactly as it should. your function 
> void handle(Bar child) does access the class Bar of another 
> module, and the members of foo are not accessible.
> and you can implement the desired behaviour like this:
>
> import b;
> void handle(Bar child) if(isDerivedFrom!(Foo, Bar))
> {
>   (cast(Foo)child)._c += child.c;
> }

No it does not. You should never have to cast to a parent type, 
NEVER!

That is a red flag if you have to do that, a major one at that.


More information about the Digitalmars-d mailing list