Sto creando una classe che ha una variabile di istanza con diverse implementazioni, ma il problema è che tutte le implementazioni hanno un'interfaccia leggermente diversa.
Esempio:
class GameObject {
virtual Transform * getTransform() = 0;
};
class Transform {
virtual void setPosition() = 0;
virtual Model getModel() = 0;
virtual void refreshModel() = 0;
virtual void Draw() = 0;
};
// This Class has a .cpp
class TransformImpl : public Transform {
virtual void setPosition();
Model getModel();
void refreshModel();
void Draw();
};
// This Class has a .cpp
class InstancedTransformImpl : public Transform {
void setPosition(int instance);
std::vector<Model> getModels(); // notice the difference in the interface
void refreshModel();
void Draw();
};
Il punto che voglio fare è che voglio solo una classe GameObject quindi voglio che il mio metodo geTransform() abbia un tipo di ritorno di classe Transform . Il problema che sto avendo è che poiché TransformImpl e InstancedTrasformImpl hanno interfacce leggermente diverse non posso avere getTransform() per restituire un Transform e invece ho bisogno di implementare GameObject due volte con un sacco di codice duplicato.
C'è una buona soluzione per implementare GameObject una volta?
O sarebbe meglio avere più implementazioni GameObject ciascuna avente rispettivi Transform di Impl con un'interfaccia più clemente?