首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在类初始化器中设置联合?

如何在类初始化器中设置联合?
EN

Stack Overflow用户
提问于 2011-03-11 10:13:53
回答 1查看 5.5K关注 0票数 7

给定如下所示的类和给定的联合,如何将联合初始化为正确的值?

这里尝试的是使用两个或更多不同类型作为类的核心数据类型之一。不是使用void*,而是构造将要使用的类型的联合,假设这些类型是预先知道的。问题是在实例化类时如何初始化正确的联合成员。这些类型不是多态的,因此通常的继承模型似乎并不合适。一些天真的尝试初始化正确的工会成员无果而终。

代码语言:javascript
复制
union Union {
   int n;
   char *sz;
};

class Class {
   public:
   Class( int n ): d( 1.0 ), u( n ) {}
   Class( char *sz ): d( 2.0 ), u( sz ) {}
   ....
   double d;
   Union u;
};

在寻找解决方案之后,答案变得显而易见,并且可能是这个答案存储库的一个很好的解决方案,因此我将其包含在下面。

EN

回答 1

Stack Overflow用户

发布于 2011-03-11 10:14:58

对于任何没有构造函数的类型,都可以在联合中对其进行初始化。此answer on union initializers给出了解决方案的提示:

代码语言:javascript
复制
union Union {
   int n;
   char *sz;
   Union( int n ): n( n ) {}
   Union( char *sz ): sz( sz ) {}
};

现在它可以正常工作了。很明显,如果你知道该找什么。

编辑:您还可以在类构造函数中注意联合中使用的类型,通常使用int或类似的类型。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5268246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档