Use composition instead of multiple inheritance
Avoid inheriting the same base through multiple paths
Keep a single direct ownership of shared data
Use function pointers in structs when polymorphic behavior is needed
Pass shared state explicitly to functions
Flatten the hierarchy where possible
Use separate interfaces as independent structs
Prefer delegation over inheritance-like patterns
Ensure only one copy of common data exists
Use careful struct embedding to prevent ambiguity
