7

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

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

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

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

4

1 回答 1

9

对于任何没有构造函数的类型,事实证明您可以在联合中对其进行初始化。这个关于联合初始化器的答案给出了解决方案的提示:

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

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

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

于 2011-03-11T02:14:58.243 回答