C ++如何获得位域成员的大小?

时间:2014-06-11 17:01:57

标签: c++

我试图获得一个位域的大小。

例如,我有一个通用句柄:

template<size_t n, size_t m>
struct handle
{
    uint32 index : n; 
    uint32 validation : m;
}

现在我想得到会员的大小。

我发现了一个宏,当我有一个handle<16, 16>时可以使用,并将所需的成员扩展为sizeof。在这种情况下,如果我传入index成员,我会得到16作为输出。

但是我必须传递输出变量。

有没有办法让一些模板魔法直接扩展到所需的数字?所以我可以通过sizeof_bit(class, member)并获得此会员的sizebit大小?

1 个答案:

答案 0 :(得分:3)

也许像

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之类的操作来计算运行时的位数,但效率相当低。