У меня есть функция 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