Wrapper: Methode passt nicht in Basisklasse
-
Abend!
In meinem Projekt habe ich einen kleinen Wrapper um Linux und Windows Resourcen:
class ResourceManager { // Viele Methoden, die unter Win und Linux gehen virtual SigSlot* createSigSlot() = 0; virtual HardwareBuffer createBuffer(params...); = 0 // Problem };Meine konkreten Klasse implementieren nun diese Klasse, also z.B. LinuxResourceManager : public ResourceManager
Das Problem ist die letzte Methode. Unter Linux klappt alles wunderbar, aber unter Windows kann es sein, dass ich den HardwareBuffer verliere und neu erzeugen muss. Wenn er neu erzeugt wurde, muss ich die Benutzer des HardwareBuffers benachrichtigen (so dass sie ihn neu füllen können). Drum müsste die Windows Version so aussehen:
virtual HardwareBuffer WinResourceManager::createBuffer(params..., ResourceHolder* rh); = 0Wie gesagt, unter Linux brauche ich aber den letzten Parameter ResourceHolder nicht. Die Methoden sehen also unterschiedlich aus und können eigentlich nicht in die Basisklasse ResourceManager. Da brauch ich sie aber, da beide Plattformen HardwareBuffer erzeugen können!
Jemand eine Idee, wie man das lösen könnte?
-
Was spricht dagegen, den Parameter trotzdem zu übergeben, aber in der Linux-Version nicht zu verwenden? Und wem gehört letztendlich der Puffer, den du dort zurückgeben willst?
PS: Ich hoffe, die Position des Semikolon ist nur ein Tipfehler

-
CStoll schrieb:
Was spricht dagegen, den Parameter trotzdem zu übergeben, aber in der Linux-Version nicht zu verwenden? Und wem gehört letztendlich der Puffer, den du dort zurückgeben willst?
Eigentlich nichts.

Wenn mir nix besseres einfällt, werd ich es auch so machen. Ich dachte nur, es hat vielleicht jemand eine bessere Idee:)
CStoll schrieb:
PS: Ich hoffe, die Position des Semikolon ist nur ein Tipfehler

Hehe, ja. Der ganze Code ist Pseudocode und aus dem Gedächtnis abgetippt.