C++ - 引用结构的最后一个字段,不占用任何空间

c++ - reference the last field of a struct without it taking any space

提问人:LeXav 提问时间:10/9/2023 更新时间:10/9/2023 访问量:74

问:

使用 c++23,

我有一个大的记忆框架,它有一个标题,收集一些信息。

所以布局是 Main + 重复结构 Other 之后。 有没有一种现代的方式来表达这一点,而不占用任何空间?

struct Other{

    int a;
    int b;

};

struct Main {

    uint64_t a;
    uint64_t b;
    Other s; <- this one

};
...
Main *m = std::bit_cast<Main*>(addr_ptr);
...
span <Other> sp {&m->s, some_length};

当前的解决方案是这样定义一个虚拟结构:

struct Main {

    uint64_t a;
    uint64_t b;

};
struct Main_full {

    uint64_t a;
    uint64_t b;
    Other s;

};

并酌情施法。

但是有没有一种干净而现代的方式可以在 C++23 中表达这一点,而不必强制转换?

[[ no_unique_address ]]空类不起作用,但这是我想找到的东西。

这只是为了代码的表现力(主观的,但这正是我所追求的)。

谢谢

+20 C++23

评论

0赞 Caleth 10/9/2023
当你说“不必投射”时,这是否包括在你的例子中?std::bit_cast<Main*>
0赞 Caleth 10/9/2023
是constexpr吗?some_length
0赞 chrysante 10/9/2023
实际上没有任何语言支持可以完全按照您打算的方式执行此操作。在 C99 中,您可以添加一个空数组作为结构的最后一个成员,但在 C++ 中不能。为什么不能使用 span 来访问数据?sp
0赞 LeXav 10/9/2023
@chrysante:没有任何义务,只是为了确保我没有错过可以做到这一点的语言功能:)
0赞 LeXav 10/9/2023
@Caleth:some_length可以是肯定的,因为这些结构在哩哩时是已知的。对于演员来说,这只是一个例子,说明已经做了什么,我想避免。这个问题只是为了“美容”目的:)

答: 暂无答案