2011-03-11 70 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類型。

相關問題