首页 > 解决方案 > 将结构类型附加到另一个的最佳实践

问题描述

我正在设计一些用作转换包的数据结构,如下所示:

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 */];
}

标签: c++

解决方案


推荐阅读