Angenommen, ich habe:Wie sollte ich einen Mehrfachvererbungskonflikt von Typen anstelle von Methoden behandeln?
class A { public: using foo_t = int; }
class B { public: using foo_t = int; }
class C : public A, public B { }
ich C::foo_t
beziehen möchten. Ja, es muss C::foo_t
, nicht C::A::foo_t
und C::B::foo_t
sein. Offensichtlich beklagt sich der Compiler über Mehrdeutigkeit. Wenn dies Methoden wären, könnte ich virtuelle Vererbung und vielleicht ein Mixin verwenden, um einen Diamanten oder was auch immer zu bilden. Aber was soll ich für Typen tun? Sollte ich nur manuell eine using-Anweisung hinzufügen?
Hinweise:
- Sie können davon ausgehen, ich behaupte, statisch beide foo_t die gleich sind.
Warum nicht 'mit foo_t = A :: foo_t'? – skypjack
Wo ist deine Diamantenvererbung? Ich kann nur Mehrfachvererbung sehen, C erbt von A und B. – Janosimas
[Diamantvererbung] (https://en.wikipedia.org/wiki/Multiple_inheritance#The_diamond_problem) nur möglich mit mindestens 4 Klassen. – Drop