1

我有一组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 类型,因此不会出现特别的问题或开销。

4

1 回答 1

4

那应该仍然是一个 POD。

您可以通过使用std::is_podtrait 来确定:

std::is_pod<Data>::value;

true如果是DataPOD,则为假,否则为假。

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

于 2013-01-09T04:57:42.113 回答