У меня есть вопрос о проблеме, с которой я борюсь. Надеюсь, ты сможешь терпеть меня.
Представьте, что у меня есть класс Object, представляющий базовый класс иерархии физических объектов. Позже я наследую его, чтобы создать классы Object1D, Object2D и Object3D. Каждый из этих производных классов будет иметь определенные методы и атрибуты. Например, 3d-объект может иметь функциональность для загрузки 3d-модели, которая будет использоваться средством визуализации.
Так что у меня было бы что-то вроде этого:
class Object {};
class Object1D : public Object { Point mPos; };
class Object2D : public Object { ... };
class Object3D : public Object { Model mModel; };
Теперь у меня есть отдельный класс, называемый Renderer, который просто принимает Object в качестве аргумента и, хорошо, отрисовывает его :-)
Аналогичным образом, я бы хотел поддерживать разные виды рендеров. Например, у меня может быть по умолчанию тот, на который может положиться каждый объект, и затем предоставить другие конкретные средства визуализации для каких-либо объектов:
class Renderer {}; // Default one
class Renderer3D : public Renderer {};
И тут возникает моя проблема. Классу рендеринга необходимо получить Object в качестве аргумента, например, в конструкторе, чтобы получить любые данные, необходимые для визуализации объекта.
Пока все хорошо. Но Renderer3D должен получить аргумент Object3D, чтобы получить не только базовые атрибуты, но и конкретные атрибуты трехмерного объекта.
Конструкторы будут выглядеть так:
CRenderer(Object& object);
CRenderer3D(Object3D& object);
Теперь, как мне указать это в общем виде? Или еще лучше, есть ли лучший способ разработать это?
Я знаю, что могу положиться на RTTI или подобное, но я бы хотел избежать этого, если это возможно, поскольку я чувствую, что, возможно, есть лучший способ справиться с этим.
Заранее спасибо!