2011-03-11 34 views
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; 
}; 

淘换的解决方案后,答案变得明显,并有可能成为这个仓库答案的一个很好的解决方案,所以我把它给下面。

回答

9

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

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

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

编辑: 你也可以在你的类构造函数中注意联合中使用的类型,通常是int类型。

相关问题