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?

Reply via email to