1
我有一組structs
,它們來自我轉換爲C++的一些C代碼,根據我的理解,它們應該是POD類型。下面是一些例子:將結構從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類型,所以不會出現特別的問題或開銷。
奇怪的是,沒有一個結構被'is_pod'特徵報告爲POD。我想知道爲什麼,或許與位域包裝有什麼關係?這似乎很奇怪。 – Jack
@傑克它在我的gcc工作:http://stacked-crooked.com/view?id=0d31687b000ddca688e12ad6fd0eea44雖然不確定位域。 – Pubby
我的意思是他們沒有被報道爲POD,即使沒有在他們內部聲明的方法,我總是認爲他們是因爲他們只是結構。 – Jack