私は、これは動作しません驚いている:mem-initializerで共用体を初期化できますか?
union DlDatum
{
float mFloat;
s32 mInteger;
};
class DlDbE
{
public:
DlDbE(float f) : mData.mFloat(f) {};
private:
DlDatum mData;
};
は、C++のコンストラクタMEM-初期化子リストに組合を初期化する方法はありますか?
更新:回答:ユニオンのコンストラクタを作成します。それができたかどうかは分かりませんでした。ここに私がやったことです:他のメンバーと同様に
union DlDatum
{
float mFloat;
s32 mInteger;
bool mBoolean;
u32 mSymbol;
u32 mObjIdx;
DlDatum( ) : mInteger(0) {}
DlDatum(float f) : mFloat(f) {}
DlDatum(s32 i) : mInteger(i) {}
DlDatum(bool b) : mBoolean(b) {}
DlDatum(u32 s) : mSymbol(s) {} // this ctor should work for objIdx also
};
class DlDbE
{
public:
DlDbE() {}
DlDbE(float f) : mData(f) {}
DlDbE(u32 i ) : mData(i) {}
DlDbE(bool b ) : mData(b) {}
...etc..
private:
DlDatum mData;
};
http://stackoverflow.com/questions/321351/initializing-a-union-with-a-non-trivial-constructor – Mysticial