• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

  • Автор темы 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

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

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