• Paranoid - курс по анонимности и безопасности в сети от команды codeby. Защита персональных данных, анонимность в сети интернет, настройка виртуальных машин, безопасная передача данных, анти форензика и еще много всего полезного. Подробнее ...

  • Мобильный клиент нашего форума для Android гаджетов доступен в Google Play Market по этой ссылке. Клиент можно скачать с нашего форума по этой ссылке. Последняя версия МК в нашем телеграм канале вот здесь

Сериализация с помощью потока

  • Автор темы Crucian
  • Дата начала
C

Crucian

#1
Всем добрый день.
Есть следующая проблема:
В классе переопеделен оператор <<.

Код:
//-------------------------CData.h--
#include <iomanip>
class CData:public CObject
{
DECLARE_SERIAL(CData);
public:
std::string data;

CData(){data="";}

void display(std::ostream& os);
private:
friend std::ostream& operator<<(std::ostream& os,CData ob)
{
ob.display(os);
return os;
}
};

//-------------------------CData.cpp--
#include "stdafx.h"
#include "CData.h"
void display(std::ostream& os)
{os<<data;
}
IMPLEMENT_SERIAL(CData,CObject,0)
Что нужно сделать, чтобы в MS Visual C++ в методе Serialize использовать оператор добавления в поток, и не переопеделять метод CObject::Serialize.

Например так:

Код:
void CMyDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
ar<<MyData; //CData MyData
}
else
{}
}
В таком исполнении компилятор выдает ошибку.
Может кому-то подобная задача попадалась. Заранее благодарю
 
C

Crucian

#3
Да правда...
Но это опечатка.

Суть вопроса-это сделать сериализацию без использования наследования от класса CObject
и следовательно без переопределения метода Serialize.

Если есть хоть какая-то информация по этой теме буду очень рад.
 
G

gamecreator

#4
cout.operator <<(аргумент);

если не поможет, то попробуй
std::cout.operator <<(аргумент);
 
04.09.2006
2 566
3
#5
<!--QuoteBegin-Crucian+14:11:2007, 09:18 -->
<span class="vbquote">(Crucian @ 14:11:2007, 09:18 )</span><!--QuoteEBegin-->Суть вопроса-это сделать сериализацию без использования наследования от класса CObject
[snapback]85570" rel="nofollow" target="_blank[/snapback]​
[/quote]
Хочешь чтобы твой класс CData не был наследником CObject и при этом его можно было сохранять в поток используя "<<"? Я правильно понял?
 
C

Crucian

#6
А в каком месте это использовать?

Если в Serialize, то оператор должен вызываться для объекта CArchive& ar, а не для cout.
Не очень понял идею...
 
C

Crucian

#9
Да, это именно то что нужно.
Всем большое спасибо за участие и за помощь
 
Вверх Снизу