c++ - 将结构类型附加到另一个的最佳实践
问题描述
我正在设计一些用作转换包的数据结构,如下所示:
struct Header {
int header_member;
};
struct Tail {
int tail_member;
char data[]; //flexible array here, or char data[0], or char *data... the point
//is that the data holds an continual memory, that's why it must be at last
};
struct BodyA : public Header{
int ba;
Tail tail;
};
struct BodyB : public Header{
int bb;
Tail tail;
};
访问成员时有点不舒服Tail
:
int main() {
BodyA a;
a.header_member = 1;
a.tail.tail_member = 2;
}
如您所见,与直接访问 header_meber 不同,我必须使用tail.tail_member
访问 tail 的成员,这不是很直观,特别是如果这是用户的公共 API。
所以我可以通过什么方式将一个尾部结构“附加”到另一个结构上,以便直接调用尾部的成员?
编辑:给出我遇到的真正问题以使这个问题更清楚:
struct CompressedHeader {
unsigned int original_size;
unsigned int compressed_size;
char compressed_data[];
};
struct TextFile {
int lines;
CompressedHeader compressed_header;
};
struct ImageFile {
int width, height, channels;
CompressedHeader compressed_header;
};
int main() {
ImageFile* imageFile = (ImageFile*) new char[sizeof(ImageFile) + 32 /* 32 bytes for compressed data */];
}
解决方案
推荐阅读
- python - NumPy:获取 3D 数组行和的 argmax 的最快方法
- r - 删除 lag == 0 的成对行并使用 dplyr 和链接计算百分比变化
- python - 如何使用一个 numpy 布尔数组来修改另一个 numpy 数组?
- python - 如何命名当前包的公共方法,但对于其他包应该是非公共的?
- auth0 - 创建 Auth0 用户
- spring-boot - 如何将 Vaadin Flow (13/14) 的默认语言环境设置为德语
- node.js - 尝试使用反应渲染时出现意外标记,预期“,”
- ubuntu - Compiling WebRTC has failed
- node.js - 无法使用我的 heroku 应用程序连接到 mongodb 数据库?
- html - active button should not change color on hover