我有一组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类型,这样就不会出现特别的问题或开销。
答案 0 :(得分:4)
那应该是POD。
您可以确定使用std::is_pod
特征:
std::is_pod<Data>::value;
如果true
是POD,则将为Data
,否则为false。
无论如何,我不打算将函数移动到struct体中。除了不同的调用语法之外,你并没有真正获得任何东西。