Создание класса с указателем на другой класс

Учу C++. Пишу свой велосипед (сугубо для учёбы) в виде рендера для командной строки Windows. Возникла дилемма, которую не знаю, как решить

Дано:

  1. Абстрактный класс «RenderDataObject» для наследования другими классами. У класса есть виртуальная функция «GetData()», которая обязана перегружаться потомками
  2. Класс «Render». Он имеет вектор, который хранит указатели на объекты класса «RenderDataObject». При вызове другой функции класс «Render» обходит вектор и вызывает у объектов «RenderDataObject» функцию «GetData()», после чего происходит отрисовка

Для связи между двумя этими класса в конструктор класса «RenderDataObject» я передаю указатель на класс «Render» и храню его. В конструкторе мы вызываем функцию «Render::AddObject(RenderDataObject* A)», чтобы добавить указатель в вектор. В деструкторе вызываем функцию «Render::RemoveObject(RenderDataObject* A)», чтобы удалить указатель из вектора

Проблема: Как корректно сделать связь между ними? Передача указателя класса «Render» в конструктор «RenderDataObject» вроде бы и неплохая идея, но для любого потомка нужно будет передавать указатель, что как-то странно выглядит. Плюс может быть куча других параметров и, как мне кажется, это очень неудобно

Думал над тем, чтобы класс «Render» имел шаблонную функцию, которая бы создавала объект и возвращала его, но тогда никак нельзя передать параметры в конструктор класса-потомка. Плюс такое даже скомпилировать не получилось, хотя может я делал что-то не так

Ещё возник вариант с глобальной переменной класса «Render» в файле .h/.cpp и абстрактный класс может ей пользоваться, но как-то это тоже очень странно выглядит

UPD: Оказывается я неправильно писал шаблонную функцию, сейчас получилось. Но возникла другая проблема: как можно передать параметры в конструктор потомка? Ведь, теоретически, эту функцию может использовать любой потомок класса «RenderDataObject»

class RenderDataObject
{
    const char* abstractData = "Data abstract class";

public:
    RenderDataObject()
    {

    }
    virtual const char* GetData() = 0;
};

class myObject : public RenderDataObject
{
private:
    const char* objectData = "Data my object";

public:
    myObject(const char* data)
    {
        objectData = data;
    }
    const char* GetData()
    {
        return "Hello, world!";
    }
};

std::vector<RenderDataObject*> vector;

template <class T>
T* Create()
{
    T* value = new T;
    vector.push_back(value);
    return a;
}

int main()
{
    myObject* obj = Create<myObject>();
    system("pause");
}

Ответы (0 шт):