Подтвердить что ты не робот

С++: союзы с методами?

Есть ли что-то неправильное в союзе, имеющем один или несколько методов? Или что-нибудь, на что можно обратить внимание? (Я вижу, что конструкторы/деструкторы являются проблематичными по причинам шизофрении)

4b9b3361

Ответ 1

Из стандартов С++ 03 и С++ 0x (Draft N3092):

9.5 Союзы
Объединение может иметь функции-члены (в том числе конструкторы и деструкторы), но не виртуальные (10.3) функции. Объединение не должны иметь базовые классы. Объединение не должны использоваться в качестве базового класса.

Если инициализация объединения с использованием синтаксиса агрегатного инициализатора (U u = { 42 };) или установка члена впоследствии (U u; u.i = 42;) не является "проблематичной", инициализация его с помощью конструктора (U u( 42 );) не является "проблематичной" либо.
Единственный "улов" заключается в том, что вы не можете использовать синтаксис агрегатного инициализатора для объединения, у которого есть определенный пользователем конструктор.

Ответ 2

Как вы могли бы реализовать такую ​​вещь? Здесь указатель на союз, надеюсь, вы не возражаете, что не знаете, какие переменные безопасны в использовании, а какие нет.

Unions - это действительно мертвая языковая функция - они были полностью заменены библиотечными методами, такими как boost:: variant или boost:: any. Вид, похожий на void * и функциональные макросы - они очень редко используются в С++ по сравнению с другими параметрами.