ускоренная сериализация производного объекта не вызывает функцию serialize() производного объекта

Я прочитал множество подобных вопросов, но не нашел ответа. Я использую Visual Studio 2010 и Boost 1.47.

Вот код, он полный и компилируемый:

#include "stdafx.h"

#include <string>
#include <sstream>

#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>

#include <boost/serialization/export.hpp>

using namespace std;

class BaseObject 
{
public:

    BaseObject(void) { };
    virtual ~BaseObject(void) { };

    template<class Archive>
      void serialize(Archive &ar, const unsigned int version)
      { /* nothing happens here */  };
};

class DerivedObject : public BaseObject
{
public:

    string text;

public:

    DerivedObject(void) { };
    ~DerivedObject(void) { };

    template<class Archive>
      void serialize(Archive &ar, const unsigned int version)
      {
          ar & text;
      };
};

BOOST_CLASS_EXPORT(DerivedObject)

int _tmain(int argc, _TCHAR* argv[])
{
    DerivedObject der;
    der.text = "Testing!";

    std::ostringstream os;
    boost::archive::text_oarchive oa(os);
    oa.register_type<DerivedObject>();

    // I made a DerivedObject, but I'm casting it to a BaseObject
    // as the serialization code should not have to know what type it is
    BaseObject *base = &der;
    // now serialize it
    oa << *base;

    printf("serialized: %s\r\n",os.str().c_str()); 

    return (0);
}

Вы можете видеть, что это очень просто, и я добавил магию BOOST_CLASS_EXPORT и oa.register_type, которая должна убедиться, что DerivdObject::serialize() вызывается, даже если она не является виртуальным методом.. но по-прежнему вызывается только сериализация () в BaseObject. Возможно, проблема специфична для Visual C++? Подскажите пожалуйста?

6
задан Nick 15 March 2012 в 10:44
поделиться