Здравствуйте, Draconus, Вы писали:
D>Здравствуйте, LaptevVV, Вы писали:
LVV>>А зачем?
LVV>>Используй read/write c первым аргументом (char *)&name.
LVV>>LVV>>long a;
LVV>>from.read((char *)&a, sizeof(long));
LVV>>to.write((char *)&a, sizeof(long));
LVV>>
LVV>>И так для любого типа, который тебе нужен. В том числе и для новых.
LVV>>Но если очень хочется, то надо перегрузить.
D>Проблема вот в чем. Мне необходимо сохранять в двоичный файл данные из различных встроенных и custom-типов данных. При этом часто имеет место ситуация, когда один тип включает другой (например, класс, содержащий несколько массивов различных типов). Если делать вывод в обычный текстовый поток, можно переопределить операторы << для каждого из используемых классов, причем в классах содержащем, например, vector, использовать единожды переопределенный оператор << для vector. При этом я думал, что в зависимости от того, какой поток я открою (двоичный или текстовый), вывод автоматически будет идти в нужном виде.
D>У меня используется что-то вроде:
D>D>template<class _T>
D>ostream& operator<< (const ostream& _out, const vector<_T>& _vec)
D>{
D> _out << _vec.size(); // здесь можно ставить write
D>
for (vector<_T>::iterator it=_vec.begin(); it!=_vec.begin(); it++)
D> _out << *it;
// и здесь можно ставить write
D>
return _out;
D>}
D>
//....
D>ofstream out(
"file.dat", ios::binary);
D>vector<
double> vec;
D>out << vec;
D>
Только не помню, как sizeof(T) сработает.