我尝试获取位域的大小。
例如,我有一个通用句柄:
template<size_t n, size_t m>
struct handle
{
uint32 index : n;
uint32 validation : m;
}
现在我想获取成员的大小。
我发现了一个当我有 handle<16, 16>
时可以工作的宏并将所需成员扩展为 sizeof
。在这种情况下,如果我传入 index
我得到的成员(member)16
作为我的输出。
但在那里我必须传递我的输出变量。
有没有办法通过一些模板魔法直接扩展到所需的数字?这样我就可以传入 sizeof_bit(class, member)
我得到 sizebit
该成员的大小?
最佳答案
也许是这样的
template<size_t n, size_t m>
struct handle
{
enum { index_bits = n };
enum { validation_bits = m };
uint32_t index : n;
uint32_t validation : m;
};
Demo .
如果您无法控制定义位域的结构,您可以执行类似 this 的操作在运行时计算其中的位数,但效率相当低。
关于C++ 如何获取位域成员的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24168553/