आप ऑपरेटर धारा बाहर (<<
) ओवरलोड और प्रत्येक व्यक्ति के क्षेत्र (और इसके विपरीत)
संपादित बाहर स्ट्रीम कर सकते हैं: यहाँ एक पूरा उदाहरण है ...
#include <iostream>
#include <fstream>
#include <map>
using namespace std;
template <typename T>
void serialize(ostream& str, const T& field)
{
str.rdbuf()->sputn(reinterpret_cast<const char*>(&field), sizeof(T));
}
template <typename T>
void deserialize(istream& str, T& field)
{
str.rdbuf()->sgetn(reinterpret_cast<char*>(&field), sizeof(T));
}
class MyGame
{
public:
MyGame() : a(), b() {}
MyGame(int av, int bv) : a(av), b(bv) {}
friend ostream& operator<<(ostream& str, MyGame const& game);
friend istream& operator>>(istream& str, MyGame& game);
int getA() const { return a; }
int getB() const { return b; }
private:
int a;
int b;
};
ostream& operator<<(ostream& str, MyGame const& game)
{
serialize(str, game.a);
serialize(str, game.b);
return str;
}
istream& operator>>(istream& str, MyGame& game)
{
deserialize(str, game.a);
deserialize(str, game.b);
return str;
}
int main(void)
{
{
ofstream fout("test.bin", ios::binary);
MyGame game(10, 11);
fout << game;
}
{
ifstream fin("test.bin", ios::binary);
MyGame game;
fin >> game;
cout << "game.a: " << game.getA() << ", game.b: " << game.getB() << endl;
}
return 0;
}
आप को समझना चाहिए हालांकि इस दृष्टिकोण के साथ मुद्दे, जैसे परिणामी फ़ाइल प्लेटफ़ॉर्म विशिष्ट (यानी गैर पोर्टेबल) आदि होगी
यह वास्तव में बाइनरी नहीं है?;) – Nim
भी, एक धारा के लिए फ़ील्ड को अलग करने के लिए एक विभाजक की आवश्यकता होती है (आमतौर पर एक स्थान), इस उदाहरण में यह स्ट्रीम आउट ऑपरेशन में अनुपलब्ध है, इसलिए जब आप पूर्णांक को पढ़ने का प्रयास करते हैं तो ऑपरेशन में स्ट्रीम बस अपवाद फेंक देगी (I सोचो, मैंने इसका परीक्षण नहीं किया है इसलिए मैं गलत हो सकता हूं) – Nim
यह इसे काट नहीं देगा। सबसे पहले, आप यहां "धोखाधड़ी" कर रहे हैं क्योंकि आप ओपी की आवश्यकता के अनुसार किसी भी पॉइंटर्स को क्रमबद्ध नहीं कर रहे हैं। साथ ही, आप यह मान रहे हैं कि << and >> ऑपरेटर चाल चलेंगे, जब यह प्राइमेटिव्स के क्रमबद्धीकरण को नियंत्रित करने के लिए अधिक मजबूत होता है (उदाहरण के लिए नेटवर्क पर डेटा संचारित करने के संबंध में एचटीटीएल() और ntohl() के साथ क्या किया जाता है) । – Jon