我很惊讶这不起作用:
union DlDatum
{
float mFloat;
s32 mInteger;
};
class DlDbE
{
public:
DlDbE( float f ) : mData.mFloat( f ) {};
private:
DlDatum mData;
};
Run Code Online (Sandbox Code Playgroud)
有没有办法在c ++构造函数mem-initializer列表中初始化union?
更新:答案是为union创建构造函数.不知道可以做到的.这是我做的:
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;
};
Run Code Online (Sandbox Code Playgroud)
AnT*_*AnT 14
在C++ 03中,在您开始为联盟编写构造函数之前.
在C++ 11中,统一初始化将聚合初始化的语法扩展到构造函数初始化列表.这意味着好的旧聚合初始化器语法就像
DlDatum d = { 3.0 };
Run Code Online (Sandbox Code Playgroud)
我们都知道并喜欢C并初始化union的第一个成员,现在也可以在构造函数初始化列表中使用
union DlDatum
{
float mFloat;
s32 mInteger;
};
class DlDbE
{
public:
DlDbE( float f ) : mData{f} {}
private:
DlDatum mData;
};
Run Code Online (Sandbox Code Playgroud)
此功能仅允许您"定位"联合的第一个非静态成员以进行初始化.如果你需要更灵活的东西,那么它又回到编写构造函数.