Отложенная конструкция членов класса

115
23 февраля 2021, 01:50

Есть C++ класс такого вида. У него есть приватное поле window. И надо бы его в конструкторе моего класса тоже инициализировать как положено. Но тут я натыкаюсь на проблему: просто так взять и присвоить, как это я сделал ниже, нельзя.

Вопрос: как можно?

renderer.hpp

#define RENDERER_H
class Renderer
{
public:
    Renderer();
    ...
private:
    sf::RenderWindow window;
    ...
};
#endif // RENDERER_H

renderer.cpp

Renderer::Renderer()
{
    sf::ContextSettings contextSettings(24, 8, 2);
    this->window = sf::RenderWindow(..., contextSettings);
    ...
}
Answer 1

Из вашего кода не видно, нужен ли вам этот contextSettings как самостоятельный именованный объект. Скорее всего не нужен. Тогда, например, так

Renderer::Renderer() : window{ ..., { 24, 8, 2 } }
{
  ...
}

или, если вам больше нравится,

Renderer::Renderer() : window(..., sf::ContextSettings(24, 8, 2))
{
  ...
}

Если же вам по какой-то причине все таки нужно (или хочется) отложить конструкцию sf::RenderWindow, т.е. все таки перенести ее в тело конструктора, то можно, например, сделать window указателем

std::unique_ptr<sf::RenderWindow> window;

и потом в конструкторе делать

Renderer::Renderer()
{
  sf::ContextSettings contextSettings(24, 8, 2);
  window = std::make_unique<sf::RenderWindow>(..., contextSettings);
    ...
}

А также начиная с С++17 вы можете использовать std::optional

std::optional<sf::RenderWindow> window;

и далее в конструкторе

Renderer::Renderer()
{
  sf::ContextSettings contextSettings(24, 8, 2);
  window.emplace(..., contextSettings);
  ...
}
READ ALSO
QRegExp некорректно проверяет строку на правильность

QRegExp некорректно проверяет строку на правильность

Необходимо проверять строку на соответствие регулярному выражению, если соответствует - true, если нет - falseПользуюсь вот такой конструкцией:

91
один и тот же файл jquery

один и тот же файл jquery

подскажите в чем проблема, делаю экспорт (через ajax отправляю данные) удаляю старый файл и в конце формирую заново файл, но имя одно и тоже

109
При переходе на &ldquo;назад&rdquo; в браузере отображается json ответ который получался через ajax

При переходе на “назад” в браузере отображается json ответ который получался через ajax

Словил интересную багу у себя, но понятия не имею как ее пофиксить, может кто сталкивался с подобной проблемойПо шагам

115
Событием change на select получить выбранный пользователем пункт из select

Событием change на select получить выбранный пользователем пункт из select

Помогите, пожалуйста, на js реализовать следующую задачу:

133