Я хочу хранить список всех фигур (всех типов). Если это возможно при таком подходе, конечно, дайте пример.
А, ну такое разумеется возможно в любом языке с мало-мальской поддержкой ООП, только вам придётся держать в списке указатели. Чтобы можно было держать там сами фигуры, по-моему упомянутый
Pphantom std::variant должен быть в самый раз. Я не собираюсь писать на современных плюсах, но выглядит не так уж страшно.
union хуже тем, что достался в наследство от C и не имеет никаких typesafe штук: можно обращаться к любому полю любой альтернативы, и даже чтобы просто знать, какая альтернатива хранится, придётся засовывать
union внутрь структуры (или класса), имеющей дополнительное поле-селектор. И мы можем не уследить и всё равно обратиться к полю не той альтернативы, потому что соответствие обращений значению селектора никак проверяться ни статически, ни в рантайме не будет.
Вредный совет для человека, плохо знающего плюсы. Если он про union не знал - значит, ему он и не был нужен.
Ну а теперь нужен. Волков бояться — в лес не ходить. Я вообще не понимаю, зачем писать на плюсах, если не планировать использовать современное. Есть C, есть Rust и т. д..
Используйте только релевантные. Я не шучу. Архитектурно будет криво, но зато не будет требоваться квалификация в С++.
Какая нужна квалификация, чтобы осилить
union?? А новый вариант должен быть ещё лучше, нам обязательно надо будет объявить по типу для конкретных фигур, и они нам могут пригодиться дальше и как отдельные, и в виде объединений, и объединения можно будет делать из разного числа типов фигур.
Любые.
А cppreference пишет, что не совсем любые:
As with unions, if a variant holds a value of some object type T, the object representation of T is allocated directly within the object representation of the variant itself. Variant is not allowed to allocate additional (dynamic) memory.
A variant is not permitted to hold references, arrays, or the type void.
Используют они экземпляр типа
, вот по нему документация -
https://doc.qt.io/qt-5/qpainter.htmlТС рисует напрямую через OpenGL. Кстати, пожалуйста используйте
tt для кода внутри текста или
syntax (или
code, когда
syntax не знает язык) для кода блоком, в виде формул код смотрится ещё страшнее чем без форматирования.