• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

Crucian

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

Код:
//-------------------------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

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

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

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

gamecreator

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

если не поможет, то попробуй
std::cout.operator <<(аргумент);
 
E

European

<!--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

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

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

European

Для: Crucian
Вот есть пример:
 
C

Crucian

Да, это именно то что нужно.
Всем большое спасибо за участие и за помощь
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!