现有代码:
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/