On Thu, Jun 04, 2020 at 06:09:35PM +0000, mw via Digitalmars-d-learn wrote: [...] > ---------------------------------------------------------------------- > class Person : NameI, AddrI { > mixin NameT!Person rename equals as name_equals; > mixin AddrT!Person rename equals as addr_equals; > > bool equals(Person other) { > return this.name_equals(other) && > this.addr_equlas(other); > } > } > ----------------------------------------------------------------------
TBH, whenever I run into a diamond inheritance problem or similar, my first reaction is, I'm using the wrong tool for modelling my data; I should be using some kind of component-based system instead of OO inheritance. Nowadays I rarely use OO-style inheritance for data modelling anymore; it's still useful for rare cases where a straight hierarchy makes sense (traditional GUI widgets, for example, or parse trees), but for complex modelling I just stop pretending that there's a direct mapping from problem domain to language constructs, and instead build containers that have arbitrary component combinations as an infrastructure instead. Recently I've been dabbling in ECS (entity-component-system) adaptations from gamedev: the system part is not useful to me, but the idea behind entity-component storage is very useful for modelling complex data, much more suitable than traditional OO inheritance IMO. T -- I am Ohm of Borg. Resistance is voltage over current.