[C++] Uniwersalny ekstraktor i inserter dla strumieni binarnych

#include <istream>
#include <ostream>
template<class T>
std::istream& read(std::istream& is, T& t) {
        is.read((char*)&t, sizeof(T));
        return is;
}

template<class T>
std::ostream& write(std::ostream& os, const T& t) {
		os.write((char*)&t, sizeof(T));
        return os;
}
template<class T>
std::ostream& operator << (std::ostream& os, const T& t) {
	return write<T>(os,t);
}

template<class T>
std::istream& operator >> (std::istream& is, T& t) {
	return read<T>(is,t);
}

I mały przykład

#include <cstring>
#include <fstream>
struct Superheroine {
		Superheroine(const char* name_ = "", const char* publisher_ = "") {
			strcpy(name,  name_);
			strcpy(publisher, publisher_);
		}
        char name[32];
        char publisher[32];
};
//...
std::ofstream ofs;
ofs.open("data.bin", std::ios::out | std::ios::binary | std::ios::trunc);
Superheroine
	silverFox("Silver Fox","Marvel Comics"),
	natashaIrons("Natasha Irons", "DC Comics");
write<Superheroine>(ofs, silverFox); // write<T>
ofs << natashaIrons; // operator << 
ofs.close();
ifs.open("data.bin", std::ios::in | std::ios::binary);
Superheroine heroine;
ifs >> heroine; // operator >> 
// ...
read<Superheroine >(ifs,heroine); // read<T>

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s