Tôi đang làm việc trên một ứng dụng máy khách-máy chủ sử dụng tăng :: thư viện tuần tự hóa cho các nhu cầu tuần tự hóa của nó.Tăng tuần tự hóa bằng cách sử dụng các lưu trữ đa hình
Tôi cần phải tuần tự hóa và deserialize các đối tượng đa hình dường như không hoạt động. Tài liệu này nói rằng nó được hỗ trợ nhưng không có ví dụ nào liên quan chứng minh những gì tôi đang cố gắng làm ở đây. Vì vậy, tôi không chắc lắm. Câu hỏi của tôi là có thể serialize/deserialize đối tượng đa hình bằng cách sử dụng tăng? Nếu có, tôi đang làm gì sai ở đây?
Cảm ơn!
mã:
using namespace std;
class base {
public:
int data1;
friend class boost::serialization::access;
void serialize(boost::archive::polymorphic_iarchive & ar,
const unsigned int file_version) {
ar & data1;
}
void serialize(boost::archive::polymorphic_oarchive & 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;
void serialize(boost::archive::polymorphic_iarchive & ar,
const unsigned int file_version) {
ar & boost::serialization::base_object<base>(*this) & data2;
}
void serialize(boost::archive::polymorphic_oarchive & ar,
const unsigned int file_version){
ar & boost::serialization::base_object<base>(*this) & data2;
}
public:
derived() {};
derived(int _b, int _d) : base(_b), data2(_d) {}
virtual void foo() const {std::cout << "derived" << std::endl;}
};
int main(int argc, char *argv[]) {
// client
const base *b1 = new derived(1, 2);
std::ostringstream oss;
boost::archive::polymorphic_text_oarchive oa(oss);
oa << *b1;
// server
base *b2 = new derived(3, 4);
std::istringstream iss(oss.str());
boost::archive::polymorphic_text_iarchive ia(iss);
ia >> *b2;
// prints 1, ok
cout << b2->data1 << endl;
// prints 4, why wasn't the derived class data written?
cout << (dynamic_cast<derived*>(b2))->data2 << endl;
return 0;
}
Vui lòng định dạng lại mã của bạn. Bạn cần thụt lề tất cả để làm cho nó hiển thị như một khối mã lớn. –
Mặc dù nền tảng của ứng dụng mạng này, câu hỏi hoặc chủ đề trong chính nó không liên quan gì đến mạng. Có lẽ thẻ "lập trình mạng" đã lỗi thời? – sharkin