I have some class like

class bar { }
class foo : bar
{
    bar[] stuff;
}

and have another class

class dong : bar
{
   int x;
}


Now sometimes stuff will contain dong's, but I cannot access its members it without a cast.

fooo.stuff[0].x // invalid because bar doesn't contain x;

Hence,

((cast(dong)foo.stuff[0]).x is the normal way with a possible type check.

But in my case I will never mix different types in stuff and will always use it properly or do type checking in the cases I might mix.

Rather than add a dong[] dongs; to foo, which increases the size of foo and wastes memory just to prevent the cast, I'm curious if there is any other way to solve this problem?

I simply want to do foo.stuff[0].x and have foo.stuff[0] be treated as an image.

Is an opDispatch and/or opIndex required or is there some alias trick that can be used?

I'd rather access like foo.dongs[0].x without defining a dong array directly in foo, but simply alias to stuff with an implicit cast to dong.











Reply via email to