如何在类初始化程序中设置联合?

时间:2011-03-11 02:13:53

标签: c++ initialization initializer unions

给定一个类如下面的一个类和给定的union,如何将union初始化为正确的值?

这里尝试的是使用两种或更多种不同类型作为该类的核心数据类型之一。考虑到提前知道类型,将构造将要使用的类型的并集,而不是使用void *。问题是如何在实例化类时初始化正确的union成员。类型不是多态的,因此通常的继承模型似乎不合适。一些天真的尝试初始化正确的工会成员无处可去。

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;
};

在寻找解决方案之后,答案变得明显,并且可能是这个答案库的一个很好的解决方案,所以我将其包含在下面。

1 个答案:

答案 0 :(得分:9)

对于没有构造函数的任何类型,事实证明您可以在联合中初始化它。这个answer on union initializers给出了解决方案的提示:

union Union {
   int n;
   char *sz;
   Union( int n ): n( n ) {}
   Union( char *sz ): sz( sz ) {}
};

现在它按预期工作。很明显,如果你知道要寻找什么。

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