On Sunday, 27 May 2018 at 06:00:30 UTC, IntegratedDimensions
wrote:
The problem description is not very clear, but the catfood
example gives a bit more to work with.
animal -> food
| |
v v
cat -> catfood
Of course, I'm not sure how to avoid the problem in D of
animal a = new cat();
a.f = new food()
auto c = cast(cat)a;
Cast operations are generally not guaranteed to preserve type
safety and should be avoided when possible. But if I understand
your description, you have the following relations and
transitions:
animal owns food
cat owns catfood
animal may be treated as a cat (hence the casting)
food may be treated as a catfood (hence the casting)
It may be that the inheritance relationship is backwards in your
use case. If "animal" may be treated as a "cat", then the
inheritance should be other other way around, and "animal" would
inherit from "cat".
What specific kinds of relationships are you trying to model
among what kinds of entities?