Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Запися/чтение объектов класса


Автор: Гость_User 18.9.2005, 11:23
Если есть некоторый объект object класса class_name с элементами-данными, и эти данные необходимо записывать, а затем считывать из файла будет ли корректно использование конструкций
write(f_handler, object, sizeof(class_name)) , затем где-нибудь read(f_handler, object2, sizeof(class_name)) или надо данные по отдельности записывать?

Автор: srd 18.9.2005, 12:31
В общем случае - нельзя.

Автор: kometa_triatlon 18.9.2005, 12:59
Здесь лучше всего использовать MFC-классы CArchive, CFile и сериализацию.

Автор: ST1 18.9.2005, 13:25
Цитата(kometa_triatlon @ 18.9.2005, 12:59)
Здесь лучше всего использовать MFC-классы CArchive, CFile и сериализацию.

Надо только на чистом C/C++.
Как бы записать данные в инкапсулированном виде, не поотдельности.
А по отношению к структуре write/read годится?

Автор: srd 18.9.2005, 13:54
Цитата
Надо только на чистом C/C++.

Попробуй boost::serialization. Правда может оказаться, что для твоих задач это слишком мощная библиотека - как забивание гвоздей микроскопом smile

Автор: ST1 18.9.2005, 14:51
Цитата(srd @ 18.9.2005, 13:54)
Попробуй boost::serialization. Правда может оказаться, что для твоих задач это слишком мощная библиотека - как забивание гвоздей микроскопом smile

Да действительно, это слишком круто.
Неужели встроенными средствами C, записать данные объекта класса с дальнейшим корректным чтением нельзя.

Автор: Denn 18.9.2005, 15:15
ST1 у тебя в классе могут быть указатели, как их можно будет восстановить простым чтением класса в память? Сериализация MFC не настолько проста, как кажется. там также приходится в конкретных случаях делать чтение / запись в CArchive непосредственно, думаю, это не сильно будет отличаться от read / write стандартных библиотек.

Автор: maxim1000 18.9.2005, 15:18
Цитата
Неужели встроенными средствами C, записать данные объекта класса с дальнейшим корректным чтением нельзя

конечно, можно - записывать по одному полю...
различные значения так или иначе надо писать в каком-то формате
вот, например, вопрос: как сохранять указатель?
1. сохранить объект, на который он указывает
2. сохранить что-то вроде индекса этого объекта (может, он уже был сохранен)
3. иногда даже может понадобиться сохранять реальное значение указателя
так что в любом случае надо как-то сообщить, что именно нужно делать с каждым полем...
а раз так, то можно это сделать частью кода сохранения конкретного поля...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)