在编译时评估成员的位置

时间:2016-04-26 09:09:18

标签: c++ pointers compile-time

考虑以下示例:

struct mystruct
{
    int a;
    int b;
    int c;
};

int main()
{
    mystruct x;

    std :: cout << reinterpret_cast <size_t> (&(x.b)) - reinterpret_cast <size_t> (&x) << std :: endl;
}

以上操作是使用reinterpret_cast来确定成员b在结构mystruct内的位置。在我的系统上(并且,我想,在任何合理的系统上),上面的结果为4

现在,我需要的是完全相同,但是在编译时。有没有办法完成这样的事情?我需要的是一些static constexpr size_t,在编译时会告诉我bmystruct内的位置。

1 个答案:

答案 0 :(得分:2)

您可以使用offsetof macro

执行此操作
size_t constexpr b_offset = offsetof(mystruct, b);

请注意,您不能在同一个类定义中的函数之外使用offsetof,因为此类尚未完成。