#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でもサポートされていません)が唯一のオプションですか?