А что делать в случае, если пользовательский класс создан на базе класса Qt?
Я использую QNetworkCookieJar. Как реализовать его сериализацию и гарантированно ничего не потерять?
Вариант № 1. Просто посмотреть, есть ли у класса QNetworkCookieJar перегруженные операторы << и >> . Если - да, то довериться авторам класса (если не хотите проверять) и делать как я уже тут писал. Если - нет, то вариант 2.
Вариант № 2. Унаследоваться от QNetworkCookieJar и перегрузить у него операторы << и >> так, чтобы максимально полно сохранять/восстанавливать состояние класса.
Примерно полгода назад попадалась в сети статья с примером, который можно было использовать с любым классом. Если память не изменяет, автор использовал класс QVariant для подготовки объекта к размещению в базе, а потоком не пользовался.
Никакой принципиальной разницы между этими подходами нет - просто в этом случае в классе должны быть корректно реализованы не потоковые операторы, а функции преобразования в QVariant. Всё равно скатываемся к тому насколько добросовестно авторы класса подошли к их реализациям.
Если суть вопроса состоит в записи/восстановлении именно QNetworkCookieJar, то в примерах Qt есть приложение browser (
http://qt.gitorious.org/qt/qt/trees/4.8/demos/browser) с классом CookieJar, который, похоже, решает именно такую задачу.