Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.15.3.154] |
|
Сообщ.
#1
,
|
|
|
Добрый день!
У меня возникла вот такая проблема: есть vector<T> vec; где T - это любой тип (задается в шаблоне) template <class T> class Foo { .... vector<T> vec; .... } Мне нужно записать этот вектор в бинарный файл. То есть : fstream f; f.open("file",ios::out|ios::binary); f.write(.......................,...............); ///////сама информация в char*//размер в байтах// А как это сделать я не знаю? Спасибо. |
Сообщ.
#2
,
|
|||
|
Смотря что у тебя в векторе лежит. Если это POD-структура или один из фундаментальных типов (int, double и т. п.), то можешь смело писать так:
Если же это вектор классов, то записывать надо поэлементно. При этом у класса, лежашего в контейнере, необходимо завести метод, записывающий экземпляр класса в поток, и при записи вызывать этот метод. |
Сообщ.
#3
,
|
|||
|
можно попдробнее. что такое POD структура? |
Сообщ.
#4
,
|
|
|
POD - Plain Old Data. Структура в понимании языка C.
|
Сообщ.
#5
,
|
|||
|
А что будет если пробовать записывать класс находящийся в контейнере, если не создавать этот метод... |
Сообщ.
#6
,
|
|||||
|
Я пишу вот так
И читаю так же.
Неужели я не правильно делаю? |
Сообщ.
#7
,
|
|||||
|
И все работает???
можешь привести пример такого класса |
Сообщ.
#8
,
|
|||||
|
Легко
Как ты думаешь - запишется ли строка, содержащаяся в этом классе, в файл? |
Сообщ.
#9
,
|
|
|
Все работает. Конечно если в классе есть вектор stl'евский, то конечно его надо отдельно писать. Но как правило мой класс, который я пишу, это набор векторов, флагой и статических массивов. Так что когда я говорю sizeof SomeClass, то он мне возвращает правильное значение.
|
Сообщ.
#10
,
|
|
|
И запишется тебе в файл (в моем примере) 3 указателя.
|
Сообщ.
#11
,
|
|||
|
А как должен будет выглядеть метод, который будет отвечать за сохранение объекта? И как правильно его нужно вызывать? |
Сообщ.
#12
,
|
|
|
Flex_Ferrum
Ты прав. |
Сообщ.
#13
,
|
|||||
|
Например так (для моего примера):
Дальше ты можешь сделать либо операторы потокового ввода/вывода, либо использовать алгоритмы (std::for_each, std::copy и т. п.). Вообщем, способов масса. |