Четвертый BORLAND С++ и его окружение

       

Создание потоковых объектов


Простейший способ сделать класс потоковым состоит в использовании макрокоманд, предусмотренных в библиотеке постоянных потоков. Для большинства классов будут работать следующие шаги.

  • Сделайте TStreamableBase виртуальной базой вашего класса

    (прямо или косвенно).

  • Добавьте в определение класса макрокоманду

    DECLARE_STREAMABLE.

  • Добавьте в один из своих исходных файлов макрокоманду

    IMPLEMENT_STREAMABLE. Рекомендуется также добавление макрокоманды IMPLEMENT_CASTABLE.

  • Запишите в одном из своих исходных файлов определения

    функций-элементов Read и Write.

  • Чтобы определить потоковый класс, вам нужно:

  • Включить файл objstrm.h.
  • Основывать свой класс на классе TStreamableBase.
  • Включите в свое определение класса макрокоманду



    DECLARE_STREAMABLE, например:

    #include <objstrm.h>

    class Sample : public TStreamableBase

    {

    public:

    // функции-элементы и т.д.

    private:

    int i;

    DECLARE_STREAMABLE(IMPEXPMACRO, Sample, 1);

    };

  • Классы, шаблоны и макрокоманды, необходимые для определения

    потокового класса, предусмотрены в файле objstrm.h. Каждый потоковый класс должен наследовать (прямо или косвенно) из класса

    TStreamableBase. В данном примере класс Sample наследует непосредственно из TStreamable. Класс, производный из Sample, не будет

    явно наследовать из TStreamableBase, поскольку это уже делает

    Sample. Если вы используете множественное наследование, то следует сделать TStreamableBase виртуальной базой. Это несколько увеличит классы, но никакого отрицательного эффекта не окажет.

    В большинстве случае для определения потокового класса достаточно макрокоманды DECLARE_STREAMABLE. Эта макрокоманда воспринимает три параметра. Первый из них используется при компиляции

    DLL. Второй параметр - это имя определяемого класса, а третий номер версии для этого класса. Потоковый код не обращает внимание

    на номер версии класса.

    DECLARE_STREAMABLE добавляет в ваш класс конструктор, воспринимающий параметр типа Streamable. Он предназначен для применения в потоковом коде, и непосредственно не используется.



    Содержание раздела