Я планирую дизайн для моего класса Window. Цель состоит в том, чтобы обеспечить абстракцию для создания агностического окна платформы, готового для рендеринга OpenGL. Я думаю о том, что класс «Окно» будет публичным интерфейсом, а класс WindowImpl обрабатывает работу. Будет ли Window другом WindowImpl и вызовом функций WindowImpl внутри Window, вызывают проблемы? Технически, WindowImpl не будет создан правильно? Таким образом, деструктор не будет называться, что означает, что деструктор окна не будет вызван, поэтому потребуется функция destroy. Ex.Проектирование класса Window
class MyWindow
{
public:
void create(width, height, title)
{
WindowImpl::create(width, height, title);
open = true;
}
void close()
{
WindowImpl::destroy();
open = false;
}
bool isOpen()
{
return open;
}
private:
bool open;
};
class WindowImpl
{
friend class MyWindow;
private:
static void create(width, height, title) {} // Creates the window
static void destroy()
{
XCloseDisplay(display);
}
static Display* display;
static Window window;
static GLXContext context;
};
Я не знаю, если я иду в правильном пути с этим, или если я делаю вещи более сложными, то они должны быть. Поскольку другой WindowImpl будет скомпилирован в зависимости от целевой платформы, я хочу как можно больше сохранить его от пользователя, сохраняя все данные, такие как заголовок и разрешение окна внутри класса Window, и любые необходимые изменения могут быть сделанный без WindowImpl, отслеживающий что-то большее, чем конкретный материал для реализации.
Это похоже на то, что это должно быть на CodeReview.SE? (В любом случае вы должны проверить github для SFML) – Borgleader