私は小さな問題を抱えています:
class A {
public:
enum _type {TYPE1=0,TYPE2,TYPE3} type;
union U{
struct _type1 {
//somme data
} type1;
struct _type2 {
//some other data
std::vector<int> v;
} type2;
struct _type3 {
// some other data
} type3;
U() { //constuctor
switch(type){ // access to A::type => not accept at compile time
case TYPE1 : /*init type1*/ break;
case TYPE2 : /* init type2 */; new(&v) std::vector<int>; break;
case TYPE3 : /* init type3 */ break;
default : break;
}
~U(){ //I need it to delete placement new
switch(type)
{
//same probleme
case TYPE2: v.~vector<int>(); break;
default : break;
}
}
}
};
エラー:
非静的データメンバーの無効な使用
ご覧のとおり、ユニオンコンストラクターでメインクラスのデータにアクセスする必要があります。「無制限のユニオン」(ユニオンのデータメンバーは実際にはオブジェクトです)を処理するためにこれが必要なので、他のクラスではなくユニオンを使用する必要があります。
編集:最後に、私はこの場合の解決策を見つけます:
class A {
public:
A(int t); // <= add U() code here
~A(); // <= add ~U() code here
union {
//same union data
}; //move to anonymous union
};