簡體   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