现有代码:

typedef unsigned int uint;
Class A
{
union xReg
    {
        uint allX;
        struct
        {
            uint x3      : 9;
            uint x2      : 9;
            uint x1      : 14;
        }__attribute__((__packed__)) __attribute__((aligned(4)));
    };
};

我的要求:
现在,我需要从A派生一个类,并且在派生类中,x1,x2和x3的位大小必须更改。

我该怎么做呢 ?
谢谢你的帮助 !

编辑

我有一个类(让我们说A)。 7-8个并集(每个都代表硬件寄存器)和大约20个(约)功能。这些函数中的大多数会创建这些并集的实例,并使用这些位(在我的示例中为x1,x2,x3等)。

现在,我的要求是为具有95%功能相同的新硬件添加代码。更改包括寄存器位大小的更改以及某些功能的更改。因此,在20个功能中,我需要更改至少5个功能以更改实现。这就是我选择继承并覆盖这些功能的原因。

其余15个功能,唯一的变化是位大小的变化。因此,我不想覆盖这些功能,而是使用基类的功能。但是,寄存器(联合)的位大小应该改变。我怎么做?

最佳答案

您不能在C++的派生类中更改位字段的长度。

但是,您可以尝试使用bit_field长度对类进行参数化。

template <size_t N1, size_t N2, size_t N3 = 32 - N1 - N2>
struct myStruct
{
    uint bitField1 : N1;
    uint bitField2 : N2;
    uint bitField3 : N3;
};

现在,您可以使用所需的任何N1,N2,N3实例化该结构,例如:
myStruct<9, 9> s;

关于c++ - 更改派生类中打包结构的位大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6551213/

10-17 02:14
查看更多