Я не могу воспроизвести эту проблему, поэтому трудно определить, что вызвало эту проблему.
Было бы лучше, если бы вы подняли вопрос для команды Azure Storage Explorer на GitHub здесь . Они помогут в вашей проблеме.
И еще я могу подумать, что вы можете удалить эмулятор и проводник, а затем переустановить последнюю версию.
Найденный разрешением. Я должен был экспортировать производный класс с оператором:
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;
}
Всего несколько комментариев...
Во-первых, можно использовать ту же операцию, чтобы сериализировать и десериализовать использование шаблонной версии:
template<class Archive>
void load(Archive & ar, const unsigned int version)
{
...
}
Кроме того, вместо макроса можно "настроить" архив для ожидания тех типов, распознанных как указатели:
ar.register_type(static_cast<your_static_type_here *>(NULL));