#include <stdio.h>
struct B { int x,y; };
struct A : public B {
// This whines about "copy assignment operator not allowed in union"
//A& operator =(const A& a) { printf("A=A should do the exact same thing as A=B\n"); }
A& operator =(const B& b) { printf("A = B\n"); }
};
union U {
A a;
B b;
};
int main(int argc, const char* argv[]) {
U u1, u2;
u1.a = u2.b; // You can do this and it calls the operator =
u1.a = (B)u2.a; // This works too
u1.a = u2.a; // This calls the default assignment operator >:@
}
Есть ли обходной путь, чтобы быть в состоянии сделать это последнюю строку u1.a = u2.a
с точно таким же синтаксисом, но это называют operator =
(не волнует, если это = (B &) или = (A &)) вместо того, чтобы просто копировать данные? Или неограниченные союзы (не поддерживаемые даже в Visual Studio 2010) - единственный вариант?C++ неограниченного союза обходного
Зачем вам создавать союз, если класс и его потомок? Для чего вам это нужно? – JoshD
Точкой наследования от B является получение «operator =» в структуре, которую может обрабатывать компилятор. Я помещаю потомка в профсоюз, чтобы показать, что вы можете сделать «operator =» членом профсоюза для типа _any_, кроме его собственного ... – Chris
Комментарий к 'u1.a = u2.a;' должен быть предположительно ' // Это вызывает оператор присваивания по умолчанию '... –