Как мне зарегистрировать типы с расширенной сериализацией в шаблонном классе? - PullRequest
1 голос
/ 07 июля 2010

У меня возникла проблема, когда я пытаюсь сериализовать сообщение класса шаблона. Сообщение класса шаблона имеет тип BaseClass, но я хочу, чтобы оно сериализовало производные версии класса. На данный момент это только сериализация BaseClass. Как мне зарегистрировать в boost :: serialization типы производных классов, которые я хочу сериализовать? Я пробовал несколько методов, таких как использование макроса «BOOST_CLASS_EXPORT». Также я попытался использовать этот пример:

ar.register_type(static_cast<bus_stop_corner *>(NULL));

отсюда: http://www.boost.org/doc/libs/1_36_0/libs/serialization/example/demo_gps.hpp но все равно не повезло.

template <class T>
class Frame{
...
private:
    T message;
};

class BaseType{};

class SubTypeA : public BaseType{};

class SubTypeB : public BaseType{};

int main(){
    std::vector< Frame<BaseType> > myFrames;
    //add a bunch of Frame<SubTypeA> and Frame<SubTypeB> objects to the myFrames vector.

    //serialize the vector.

    return 0;
}

Этот код вообще не компилируется, но был включен, чтобы дать вам представление о структуре моей программы.

1 Ответ

0 голосов
/ 08 июля 2010

Убедитесь, что вы BOOST_CLASS_EXPORT все ваших производных классов.

Смотрите мой ответ на этот вопрос для более глубокого ответа: c ++ boost :: serialization, устанавливающий фиксированный class_id для класса

Есть рабочий пример и все там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...