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

标签 c++

我尝试获取位域的大小。

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

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/

相关文章:

c++ - Pyclewn 中的标准输入/输出(vim 的 GDB 前端)

c++ - 如何在 Qt Creator 的主窗口中添加自定义小部件

c++ - 有没有办法将 C++11 代码重构为可以由功能较弱的编译器编译的 C++ 代码?

c++ - 如何通过引用为 C++0x 传递 Lambda 表达式参数

C++ 类后跟模板关键字

c++ - 为什么我不能在opencv中将点绕点旋转90度?

C++ 检查队列是否已满?

C++ 错误 C2065 : undeclared identifier

c++ - 为什么我不能用 {std::move(first), std::move(second)} 实例化 std::vector<std::unique_ptr<int>>?

c++ - memcpy 问题 -> 试图复制一个结构数组