#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 >:@
}
Y at-il solution de contournement pour pouvoir faire cette dernière ligne u1.a = u2.a
avec exactement la même syntaxe, mais faites-le appeler le operator =
(ne se soucient pas si c'est = (B &) ou = (A &)) au lieu de simplement copier des données? Ou est-ce que les syndicats non restreints (non pris en charge même dans Visual Studio 2010) sont la seule option?C++ solution sans restriction syndicale
Pourquoi feriez-vous une union si une classe et son descendant? Qu'est-ce que vous avez besoin de cela? – JoshD
Le point d'hériter de B est d'obtenir un "opérateur =" dans la structure que le compilateur peut gérer. J'ai mis le descendant dans l'union juste pour montrer que vous pouvez faire un "opérateur =" sur un membre d'union pour le type _any_ excepté le sien ... – Chris
Le commentaire pour 'u1.a = u2.a;' devrait vraisemblablement être ' // Ceci appelle l'opérateur d'assignation par défaut' ... –