vorrei suggerire di fornire un programma di utilità serialize_as_binary
nella classe Person
.
template<typename T>
void serialize_as_bin(const T &t, ostream& os) {
const unsigned char *p = reinterpret_cast<const unsigned char *>(&t);
for(size_t s = 0; s < sizeof t; ++s, ++p) serialize_as_bin(*p, os);
}
template<>
void serialize_as_bin(const unsigned char &t, ostream& os) {
// Code to serialize one byte
std::bitset<CHAR_BIT> x(t);
os << x;
}
struct Person {
A a;
B b;
ostream& serialize_as_binary(ostream& os) {
serialize_as_bin(a, os);
serialize_as_bin(b, os);
return os;
}
void deserialize_from_binary() {
// Similar stuff if required
...
}
};
Live example here
fonte
2015-03-23 11:57:54
'Persona' può contenere bit di riempimento. Meglio usare un metodo 'serialize_as_binary' in' class Person'. Inoltre si può finire fuori dalla memoria legata con questo metodo. Ad esempio se 'sizeof' il' Person' e 'long long' sono 4 e 8 rispettivamente. –
Non saranno incluse quelle padding nel risultato? dal momento che sto stampando parola per parola? –
Ma i bit di riempimento sono inutili e potrebbero essere fonte di confusione. La stampa di uguali oggetti 'Persona' può stampare 2 pattern di bit diversi. –