std::ofstream& operator<<(std::ofstream& out, const header& myheader) {
out.write((char*)&myheader.version, sizeof(myheader.version));
out.write((char*)&myheader.width, sizeof(myheader.width));
out.write((char*)&myheader.height, sizeof(myheader.height));
out.write((char*)&myheader.pathlen, sizeof(myheader.pathlen));
out.write((char*)&myheader.desc, sizeof(myheader.desc));
return out;
}
std::ifstream& operator>>(std::ifstream& in, header& myheader) {
in.read((char*)&myheader.version, sizeof(myheader.version));
in.read((char*)&myheader.width, sizeof(myheader.width));
in.read((char*)&myheader.height, sizeof(myheader.height));
in.read((char*)&myheader.pathlen, sizeof(myheader.pathlen));
in.read((char*)&myheader.desc, sizeof(myheader.desc));
return in;
}
int main() {
std::cout << fileHeader << '\n';
std::cin >> fileHeader;
return 0;
}
Поскольку у вас нет указателей, это довольно просто!(Обратите внимание, что это работает только с узкими потоками)
Другой пример, чтобы показать вещи с текстом и динамической памятью / указатели / etc
class thing {
std::string name;
int height;
friend std::ofstream& operator<<(std::ofstream& out, const thing & myheader);
friend std::ifstream& operator>>(std::ifstream& in, thing & myheader);
public:
thing() {}
};
std::ofstream& operator<<(std::ofstream& out, const thing & myheader) {
thing << name.size() << ' ';
thing.write(&name[0], name.size()) << ' ' << height;
}
std::ifstream& operator>>(std::ifstream& in, thing & myheader) {
int size;
in >> size;
myheader.name.resize(size);
in.read(&myheader.name[0], name.size());
return in >> myheader.height;
}