Re[2]: << и >> для двоичных потоков
От: Draconus  
Дата: 02.09.03 09:06
Оценка:
Здравствуйте, 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;


Так вот, вместо бинарного вывода получается обычный текстовый вывод.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.