Как скопировать анонимный союз

У меня есть анонимный союз в структуре

struct A {
  union {
    char c;
    double d;
  };
  A(const A &a) {
    c = a.c;
    d = a.d;
  }
};

Мне было интересно, как лучше определить его конструктор копирования. Нужно ли копировать все поля объединения? Я думаю, мы должны...?

1 ответ

Помните, что одновременно может быть активным только одно поле объединения. Чтобы скопировать объединение, вам просто нужно скопировать, какой из них активен.

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

В качестве альтернативы рассмотрите возможность использования boost::variant, который является типобезопасной оболочкой вокруг объекта одного из фиксированного числа типов.

Другие вопросы по тегам