繁体   English   中英

将结构从 C 转换为 C++ (POD)

[英]Converting structs from C to C++ (POD)

我有一组来自我正在转换为 C++ 的 C 代码的structs ,根据我的理解,它们应该是 POD 类型。 这里有些例子:

struct Data {
  u16 type : 12;
  u8 variant : 3;
  bool isTop : 1;
};

struct DData {
  u16 type : 12;
  u8 variant : 3;
  u8 layer : 1;
};

struct TData {
  struct Data data1, data2;
  struct DData ddata[MAX];
  u16 x;
  u8 y;
  u8 s : 4;
  u8 l : 4;
  u8 wl : 3;
  u8 wr : 3;
  u8 lt : 2;
};

到目前为止,我有很多方法都将指向这些结构的指针作为参数,我计划将它们直接移动到结构声明中以节省大量输入,例如。

struct Data {
  u16 type : 12;
  u8 variant : 3;
  bool isTop : 1;

  inline bool hasFlag(u64 flag) { return Types::specs[type].flags & flag; }
 };

我想知道我可以以这种方式添加的每种方法对于这个struct是否安全,这些结构通过网络序列化并转换为二进制文件,所以我需要确保这不会破坏任何东西。 如果我是对的,它们应该保持 POD 类型,因此不会出现特别的问题或开销。

那应该仍然是一个POD。

您可以通过使用std::is_pod特性来确定:

std::is_pod<Data>::value;

如果Data是 POD,则为true ,否则为 false。

无论如何,我不会费心将函数移动到结构体中。 除了不同的调用语法之外,您并没有真正获得任何好处。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM