联合中的wstring

时间:2010-04-05 14:04:10

标签: c++

我想定义一个union,用于读取特殊类型的二进制文件。联盟应该有两个成员,一个是int,另一个是一种字符串,或任何其他问题;这样做的最佳方式是什么?

union uu {  
    int intval;  
    wstring strval;  

    uu(){ memset(this, 0, sizeof(this)); }  
}

它说:“工会的成员strval有复制构造函数” 我认为strval应该有*或a&amp ;; 你会如何定义它?

提前谢谢你 糟糕

2 个答案:

答案 0 :(得分:9)

你不能这样做。工会成员必须是POD类型 - 即他们不得拥有构造函数或析构函数。即使你可以,你对memset的调用也会遍及整个字符串,从而导致未定义的行为。你当然可以使用指针:

union uu {  
    int intval;  
    wstring * strval;  

    uu(){ memset(this, 0, sizeof(uu)); }  
};

答案 1 :(得分:5)

boost.variant是您想要使用的

boost::variant<int, wstring> v("hello");

如果使用指针作为联合的成员,则必须分配并释放指针指向自己的字符串,最好使用newdelete

boost::variant解决了这个问题:它分配了变体对象本身内的所有成员(因此没有用于存储成员的动态分配),并且您不必执行任何new或{{1}打电话给自己。