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