Есть ли что-то неправильное в союзе, имеющем один или несколько методов? Или что-нибудь, на что можно обратить внимание? (Я вижу, что конструкторы/деструкторы являются проблематичными по причинам шизофрении)
С++: союзы с методами?
Ответ 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 * и функциональные макросы - они очень редко используются в С++ по сравнению с другими параметрами.