Mit C++, wie kann ich richtig Erben von der gleichen Basisklasse zweimal?

Dies ist unser ideal Vererbungshierarchie:

class Foobar;

class FoobarClient : Foobar;

class FoobarServer : Foobar;

class WindowsFoobar : Foobar;

class UnixFoobar : Foobar;

class WindowsFoobarClient : WindowsFoobar, FoobarClient;

class WindowsFoobarServer : WindowsFoobar, FoobarServer;

class UnixFoobarClient : UnixFoobar, FoobarClient;

class UnixFoobarServer : UnixFoobar, FoobarServer;

Dies ist, weil das unserer Hierarchie versuchen würde, zu Erben von Foobar zweimal, und als solcher, würde der compiler sich beschweren, mehrdeutige Verweise auf alle Mitglieder der Foobar.

Lassen Sie mich erklären, warum ich will, ein so Komplexes Modell. Denn wir wollen, dass die gleichen Variablen zugänglich WindowsFoobar, UnixFoobar, FoobarClient, und FoobarServer. Dies wäre kein problem, nur würde ich gerne die mehrfache Vererbung mit einer beliebigen Kombination der oben genannten, so dass ich die Verwendung einer server/client-Funktion auf jeder Plattform, und auch eine Plattform-Funktion, die auf entweder der client oder der server.

Kann ich nicht helfen, aber das Gefühl, dies ist ein Recht häufiges Problem mit Mehrfachvererbung... Bin ich nähert sich diesem problem von der völlig falschen Winkel?

Update 1:

Bedenken Sie auch, dass wir nutzen könnten #ifdef um dies zu umgehen, allerdings wird dies dazu neigen nachzugeben, sehr hässlichen code wie:

CFoobar::CFoobar()
#if SYSAPI_WIN32
: m_someData(1234)
#endif
{
}

... igitt!

Update 2:

Für diejenigen, die möchten, Lesen Sie mehr in der hintergrund dieser Frage, dem empfehle ich, skimming über die entsprechenden mailing-Liste thread. Sache beginnen, interessant zu werden um das 3. post. Auch gibt es eine im Zusammenhang mit code-commit mit denen Sie sehen können, das wahre Leben in Frage stehenden code hier.

  • Ich empfehle, dass Sie denken WIRKLICH hart über, ob die mehrfache Vererbung ist der richtige plan hier. Jedes mal, wenn ich jemals verwendet Mehrfachvererbung, ich habe es bereut. Ich würde sagen, dass Sie sollten sich eng an der Zusammensetzung um dieses Problem zu lösen, oder schauen Sie in der "am meisten abgeleitete" Klasse die einzige sein, die Erben von Foobar. Die Vererbung der Baumstruktur, die Sie erstellt haben, ist schwer zu verstehen und schwer zu Folgen die Operationen, wenn Sie versuchen, um wirklich debug-code.
  • Dies ist was war ich Angst vor Michael, aber das ist die einzige Lösung, die ich mir vorstellen kann. Könntest du (oder sonst jemand) denken, ein Modell, das weniger künstlich und entspricht dem Ziel, meine einfache Anforderung. Ich versuche ein Modell zu erstellen, minimiert code-Duplizierung.
  • Siehe meine follow-up-Frage: stackoverflow.com/questions/1990135/...
InformationsquelleAutor Nick Bolton | 2010-01-01
Schreibe einen Kommentar