Как скопировать анонимный союз
У меня есть анонимный союз в структуре
struct A {
union {
char c;
double d;
};
A(const A &a) {
c = a.c;
d = a.d;
}
};
Мне было интересно, как лучше определить его конструктор копирования. Нужно ли копировать все поля объединения? Я думаю, мы должны...?
1 ответ
Помните, что одновременно может быть активным только одно поле объединения. Чтобы скопировать объединение, вам просто нужно скопировать, какой из них активен.
Как правило, при использовании подобных союзов у вас будет какое-то поле "тега", отслеживающее, какое поле активно. Затем вы можете использовать switch
указание на этот тег, чтобы определить, какое поле является активным и как его скопировать.
В качестве альтернативы рассмотрите возможность использования boost::variant
, который является типобезопасной оболочкой вокруг объекта одного из фиксированного числа типов.