У меня есть набор 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, поэтому никаких особых проблем или накладных расходов не должно появиться.
Это должно остаться POD.
Вы можете быть уверены, используя std::is_pod
черта характера:
std::is_pod<Data>::value;
будет true
если Data
это POD, иначе ложь.
В любом случае, я бы не стал переносить функции в тело структуры. Вы не получаете ничего, кроме другого синтаксиса вызова.
Других решений пока нет …