Non puoi serializzare in quel modo strutture dati contenenti puntatori o classi; e nemmeno usare memcpy, memset o qualsiasi mem* su tipi non POD (per capirsi, sono quelli che si possono solo usare in C).
Se poi li devi anche inviare in network, la cosa può complicarsi ancora di più.
Un modo di procedere è dotare la struct Block di opportuni metodi.
Ad esempio:
codice:
struct Block
{
float startX;
float startY;
std::set <int> controlledVehicles;
string serialize() const {
string v;
const char* m1 = reinterpret_cast<const char*>(&startX);
copy(&m1[0],&m1[sizeof(float)],back_inserter(v));
const char* m2 = reinterpret_cast<const char*>(&startY);
copy(&m2[0],&m2[sizeof(float)],back_inserter(v));
return v;
}
void deserialize(const string& v) {
std::size_t szFloat = sizeof(float);
char* m1 = reinterpret_cast<char*>(&startX);
copy(&v[0],&v[szFloat],m1);
char* m2 = reinterpret_cast<char*>(&startY);
copy(&v[szFloat],&v[szFloat + szFloat],m2);
}
};
int main(int argc, char** argv) {
cout.sync_with_stdio(false);
Block b, b1;
b.startX = 15.1f;
b.startY = 27.4f;
string srlz = b.serialize();
b1.deserialize(srlz);
cout << b1.startX << " " << b1.startY << endl;
}