Сериализация повышения с помощью полиморфных архивов

Я не могу воспроизвести эту проблему, поэтому трудно определить, что вызвало эту проблему.

Было бы лучше, если бы вы подняли вопрос для команды Azure Storage Explorer на GitHub здесь . Они помогут в вашей проблеме.

И еще я могу подумать, что вы можете удалить эмулятор и проводник, а затем переустановить последнюю версию.

9
задан Georg Fritzsche 22 April 2010 в 21:42
поделиться

2 ответа

Найденный разрешением. Я должен был экспортировать производный класс с оператором:

BOOST_CLASS_EXPORT(derived);

Регистрация чего-то, что работает с некоторыми исправлениями.

using namespace std;  

class base {  
  public:  
    int data1;  

    friend class boost::serialization::access;  

    template<typename Archive>  
    void serialize(Archive & ar, const unsigned int file_version) {  
        ar & data1;  
    }  

  public:  
    base() {};  
    base(int _d) : data1(_d) {}  
    virtual void foo() const {std::cout << "base" << std::endl;}  
};  

class derived : public base {  
  public:  
    int data2;  

    friend class boost::serialization::access;  

    template<typename Archive>  
    void serialize(Archive & ar, const unsigned int file_version) {  
        ar & boost::serialization::base_object<base>(*this);  
        ar & data2;  
    }  

  public:  
    derived() {};  
    derived(int _b, int _d) : base(_b), data2(_d) {}  
    virtual void foo() const {std::cout << "derived" << std::endl;}  
};  

BOOST_CLASS_EXPORT(derived);  

int main(int argc, char *argv[]) {  
    // client  
    // Assign to base type  
    std::unique_ptr<const base> b1(new derived(1, 2));  

    std::ostringstream oss;  
    boost::archive::text_oarchive oa(oss);  
    oa & b1.get();   

    // server  
    // Retrieve derived type from base  
    std::unique_ptr<base> b2;

    std::istringstream iss(oss.str());
    boost::archive::text_iarchive ia(iss);
    {
        base *temp; 
        ia & temp;
        b2.reset(temp);
    }
    cout << b2->data1 << endl;  
    cout << (dynamic_cast<derived*>(b2.get()))->data2 << endl;  

    return 0;  
}  
10
ответ дан 4 December 2019 в 15:28
поделиться

Всего несколько комментариев...

Во-первых, можно использовать ту же операцию, чтобы сериализировать и десериализовать использование шаблонной версии:

template<class Archive>
void load(Archive & ar, const unsigned int version)
{
   ...
}

Кроме того, вместо макроса можно "настроить" архив для ожидания тех типов, распознанных как указатели:

ar.register_type(static_cast<your_static_type_here *>(NULL));
3
ответ дан 4 December 2019 в 15:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: