如何初始化构造函数中的位字段

Ron*_*ean 5 c++

如何在构造函数中将以下结构的值初始化为定义的值?

我的代码示例中显示的两个选项似乎都有点难看......

struct T_AnlagenInfo01
{   
    // Option A
    T_AnlagenInfo01() : fReserve80_0(0), fReserve80_1(0),.... {}; 

    // Option B
    T_AnlagenInfo01()
    { 
        memset(this, 0, sizeof(T_AnlagenInfo01));
    } 

    unsigned long fReserve80_0                          : 1;        
    unsigned long fReserve80_1                          : 1;        
    unsigned long fReserve80_2                          : 1;        
    unsigned long fReserve80_3                          : 1;        
    unsigned long fReserve80_4                          : 1;
    unsigned long fReserve80_5                          : 1;
    unsigned long fReserve80_6                          : 1;
    unsigned long fReserve80_7                          : 1;

    unsigned long fReserve81_0                          : 1;        // 81   
    unsigned long fReserve81_1                          : 1;        
    unsigned long fReserve81_2                          : 1;        
    unsigned long fReserve81_3                          : 1;
    unsigned long fReserve81_4                          : 1;
    unsigned long fReserve81_5                          : 1;
    unsigned long fReserve81_6                          : 1;
    unsigned long fReserve81_7                          : 1;
};
Run Code Online (Sandbox Code Playgroud)

Jam*_*nze 4

一个明显的解决方案是将所有位放入一个单独的结构中,该结构是结构的成员,并从静态成员复制初始化它,例如:

struct T_AnlagenInfo01
{
    struct Bits
    {
        unsigned long fReserve80_0 : 1;
        unsigned long fReserve80_1 : 1;
        //  ...
    };
    Bits myBits;
    static Bits initialBits;

    T_AnlagenInfo01 : myBits(initialBits) {}
};

T_AnlagenInfo01::Bits T_AnlagenInfo01::initialBits = {};
Run Code Online (Sandbox Code Playgroud)

这甚至允许某些位具有不同于 0 的值。