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

Тема в разделе "MS Visual C++", создана пользователем Crucian, 12 ноя 2007.

Наш партнер Genesis Hackspace
  1. Crucian

    Crucian Гость

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

    Код (Text):
    //-------------------------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.

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

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

    gamecreator Гость

    у тебя ошибка в описании функции display. она принадлежит к классу CData.
    Код (Text):
    void CData::display(std::ostream& os)
    {os<<data;
    }
     
  3. Crucian

    Crucian Гость

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

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

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

    gamecreator Гость

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

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

    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    0
    <!--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 и при этом его можно было сохранять в поток используя "<<"? Я правильно понял?
     
  6. Crucian

    Crucian Гость

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

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

    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    0
  8. gamecreator

    gamecreator Гость

    что ты вообще хочешь сделать?
     
  9. Crucian

    Crucian Гость

    Да, это именно то что нужно.
    Всем большое спасибо за участие и за помощь
     
Загрузка...

Поделиться этой страницей