Ich benutze eine Third-Party-Bibliothek, über die ich keine Kontrolle habe. Es enthält zwei Klassen A und B, die beide ein Verfahren, mit dem gleichen Namen definieren:Gruppierung von zwei Typen zusammen
class A {
public:
...
void my_method();
};
class B {
public:
...
void my_method();
};
ich eine Klasse C erstellen möchten, die ein Element enthält, die der Klasse A oder B. Entscheidend ist, kann ich nur wissen, zur Laufzeit, ob ich A oder B brauche. Diese Klasse C ruft nur die Methode my_method
auf.
Wenn ich den Code ändern könnte, würde ich einfach A und B ableiten von einer Elternklasse (Schnittstelle), die my_method definiert. Aber ich kann nicht.
Was ist die einfachste/eleganteste Art, diese Klasse C zu erstellen? Ich könnte natürlich C auf diese Weise definieren:
Aber ich möchte vermeiden, die Kosten der if-Anweisung jedes Mal zu bezahlen. Es fühlt sich auch unelegant an. Gibt es eine Möglichkeit, einen Super-Typ der Klasse A oder B zu erstellen? Oder irgendeine andere Lösung für dieses Problem?
Vielleicht mit einer Vorlage Parameter als Basisklasse? –
@ MattiaF. Die Frage lautet: "Ich kann nur zur Laufzeit ** wissen, ob ich A oder B brauche" – mvidelgauz
Vorlage funktioniert nicht, da ich nur zur Laufzeit weiß, ob ich A oder B anrufen muss. – DevShark