Как вы абстрагируетесь, не испортив код? - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть функция render, в которой мне нужно передать отображаемое окно, и какие компоненты я хочу нарисовать. Все компоненты получены из класса sf::Drawable. Например, у меня может быть sf::Text, говорящий привет или что-то еще, и sf::Rectangle, который я хочу нарисовать. sf::Drawable является абстрактным, поэтому я не могу создать структуру данных sf::Drawable и затем распечатать каждый элемент структуры.

Другими альтернативами, я думал, было вызывать render индивидуально для каждого компонента, но это просто грязный код. Я могу перегрузить рендер, так что потребуется std::vector<sf::Text>, а другой - std::vector<sf::Rectangle>, но это создаст 7+ функций рендеринга. и мне понадобится 7+ структур данных, содержащих эти объекты sf

Как бы я поступил так, как надо в ООП?

Небольшой код для визуализации:

    State s("123456780", texture); //State is derived from drawable
    std::vector<sf::Drawable> components;
    sf::Text str("You won!!!", font, 30);

    while (running) {
        sf::Event evant;
        onEvent(window, evant,s);
        if (s.equals(goal))
        {
            components.push_back(str);
        }else
            components.push_back(s);

        render(window, components);
    }

Ошибка компиляции: Error C2259 'sf::Drawable': cannot instantiate abstract class sfm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...