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

时间:2013-01-09 04:47:52

标签: c++ c struct pod

我有一组structs来自我正在转换为C ++的一些C代码,根据我的理解它们应该是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类型,这样就不会出现特别的问题或开销。

1 个答案:

答案 0 :(得分:4)

那应该是POD。

您可以确定使用std::is_pod特征:

std::is_pod<Data>::value;
如果true是POD,则

将为Data,否则为false。

无论如何,我不打算将函数移动到struct体中。除了不同的调用语法之外,你并没有真正获得任何东西。