我有一个小问题:
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
};