Здравствуйте, 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>Но если очень хочется, то надо перегрузить.
Проблема вот в чем. Мне необходимо сохранять в двоичный файл данные из различных встроенных и custom-типов данных. При этом часто имеет место ситуация, когда один тип включает другой (например, класс, содержащий несколько массивов различных типов). Если делать вывод в обычный текстовый поток, можно переопределить операторы << для каждого из используемых классов, причем в классах содержащем, например, vector, использовать единожды переопределенный оператор << для vector. При этом я думал, что в зависимости от того, какой поток я открою (двоичный или текстовый), вывод автоматически будет идти в нужном виде.
У меня используется что-то вроде:
template<class _T>
ostream& operator<< (const ostream& _out, const vector<_T>& _vec)
{
_out << _vec.size();
for (vector<_T>::iterator it=_vec.begin(); it!=_vec.begin(); it++)
_out << *it;
return _out;
}
//....
ofstream out("file.dat", ios::binary);
vector<double> vec;
out << vec;
Так вот, вместо бинарного вывода получается обычный текстовый вывод.