c++ 用于位字段的类似offsetof和sizeof功能

4xy9mtcn  于 11个月前  发布在  其他
关注(0)|答案(3)|浏览(84)

offsetof宏和sizeof操作符用于结构和类。
有没有办法让bit字段有类似的功能,可以查询bit字段成员的bit offsetbit size
sizeof可以用#define field_name_size n来模拟,但是对于offsetof,我担心使用#define field_name_offset会变得太麻烦,因为这样的话,似乎必须使用一些复杂的公式来考虑位字段中所有前面的成员。
在某些情况下,它将使人们能够克服手动保持代码与位字段定义同步的需要,这是容易失败的。
一个例子是互锁写入位字段的成员,其中需要使用自定义函数来写入这些成员,因为编译器不提供这样的功能。
另外,我知道编译器可能会以不同的方式实现位字段的布局。这样的宏/操作符的可用性也会减少这个问题的影响。

jgwigjjp

jgwigjjp1#

有没有办法为位字段获得类似的功能,以便可以查询位字段成员的位偏移量和位大小?
不,没有办法实现这一点。不能从位域成员推导出位大小偏移量。
sizeof()也将始终返回底层类型的大小,最小值为char,因此1是您将检索的最小大小。

olmpazwi

olmpazwi2#

不,没有,这也是你应该避免使用位域的原因之一,你应该使用自己的位数组,类似的,使用算术和完整的,可寻址的整数类型。

jtw3ybtb

jtw3ybtb3#

@维克托苏亚雷斯已经创建了一个甜蜜的constexpr solution prototype,他创建了一个类型和一个长长的联合,然后操纵位域并在长长中搜索效果。他的草案是不完整的,例如,它应该使用一些u8[sizeof(T)]而不是一个长的长,应该在那里搜索操纵的位,但它显示:这是可能的,它基本上可以工作/将工作。
唉,我现在没有机会创建一个完整的可移植解决方案,但我想指出一个解决方案的方法。

相关问题