從文件中使用類似這樣的方式讀取序列化數據(已知格式+字節序)是否有什麼特別不好或天真?我並不擔心可移植性,實際上它只會被我使用。我知道有一個問題會試圖提取到非壓縮的POD結構,儘管我總是可以爲每個這樣的結構定義一個單獨的operator>
。從std :: fstream反序列化
template<typename T> inline std::fstream& operator> (std::fstream& fs, T& i) {
static_assert(std::is_pod<T>::value, "Not POD");
fs.read(reinterpret_cast<char*>(&i), sizeof i);
return fs;
}
template<typename T> inline std::fstream& operator> (std::fstream& fs, std::vector<T>& v) {
static_assert(std::is_pod<T>::value, "Not POD");
fs.read(reinterpret_cast<char*>(&v[0]), sizeof(T) * v.size());
return fs;
}
template<typename T> inline std::fstream& operator> (std::fstream& fs, std::vector<std::vector<T>>& v) {
for (auto& i : v)
fs > i;
return fs;
}
inline std::fstream& operator> (std::fstream& fs, std::string& s) {
fs.read(reinterpret_cast<char*>(&s[0]), s.size());
return fs;
}
std::fstream f("file", std::ifstream::in | std::ifstream::out | std::ifstream::binary);
int i;
char j;
std::vector<std::vector<char>> vec(5, std::vector<char>(8));
f > i > j > vec;
Eh?你已經改變了'operator>'的含義?爲什麼不使用'operator >>'? – Nim