2013-07-07 47 views
5

Tôi muốn sử dụng protobuf với dự án C++ mà tôi đang làm việc. Tuy nhiên, tôi không thích làm việc với các lớp được tạo tự động mà protoc tạo ra và thích gắn bó với các POCO mà tôi đã có. Điều này là do các POCO đã được sử dụng trong các phần khác của mã và tôi muốn có thể chuyển đổi cơ chế tuần tự một cách dễ dàng sau này. Nhưng việc viết các trình biến đổi thủ công giữa các lớp thông báo POCO và các lớp thông điệp protobuf có vẻ tẻ nhạt và sai.Làm việc với protobuf và POCO trong C++

Tôi muốn biết nếu có cách nào để sử dụng protobuf để tạo bộ nối tiếp - một lớp được tạo tự động sẽ có thể tuần tự hóa và deserialize các POCO của tôi, mà không làm phiền tôi với nội bộ.

Cảm ơn.

+0

Bạn có thể viết POCO trực tiếp vào dây/đĩa không? Tất nhiên điều này sẽ không hoạt động nếu chúng chứa các con trỏ .... –

+0

Các POCO của tôi chứa các kiểu nguyên thủy, các chuỗi, các con trỏ tới các POCO và vectơ khác ở trên. Con trỏ cũng sẽ cần được xử lý (ví dụ bằng cách tuần tự hóa đối tượng nhọn và tham chiếu nó với một số id). Viết trực tiếp là serializing, tôi có thể làm điều đó bằng tay, tôi chỉ cố gắng tìm một cách để tránh nó. – Vadim

+0

Avro (http://avro.apache.org/) có thể gần hơn với những gì bạn muốn (hoặc nó sẽ là trong java). Ngoài ra với Protocol Buffers bạn không bị giới hạn trong phiên bản chính thức; bạn có thể viết trình tạo mã của riêng bạn. Có một phiên bản C/C++ khác https://sourceforge.net/projects/spbc/files/spbc/spbc-1.0.1/ được liệt kê. Nó đã không được thay đổi trong 4 năm như vậy sẽ bị lỗi thời –

Trả lời

1

Trước tiên, bạn có thể thích Cap'n Proto tốt hơn, nó được tạo bởi một trong những người duy trì Bộ đệm Protocol Protocol cũ của Google. Đáng xem xét, dù sao đi nữa.

Nhưng nếu không, bạn thực sự cần xem xét lý do tại sao bạn đang sử dụng Bộ đệm giao thức của Google.

Nếu bạn muốn đạt được khả năng tương thích về phía trước và ngược, và để có thể mở, sau đó chỉnh sửa, sau đó lưu một đối tượng có thể là một người khác được tạo, với phiên bản khác nhau của khai báo bộ đệm giao thức của bạn. cho một người khác với một phiên bản thậm chí khác nhau của tuyên bố ... sau đó bạn cần phải chỉ cần cắn viên đạn và sử dụng C++ tạo ra từ trình biên dịch đệm Protocol của Google.

Nó thực sự không chỉ là định dạng tuần tự hóa. Nó được thiết kế đặc biệt để làm cho nó dễ dàng sống với các phiên bản khác nhau của serialization của bạn, theo thời gian.

Nếu bạn không cần sự linh hoạt đó và bạn không thích mã được tạo, bạn có thể muốn xem xét một công cụ tuần tự hóa khác.

+0

Xin chào. Cảm ơn. Capn'n Proto có vẻ thú vị và tôi sẽ xem xét nó. Nó chỉ không liên quan đến công việc trong tầm tay (không hỗ trợ Java, sản phẩm quá mới để sử dụng trong sản xuất, v.v.).Tôi muốn sử dụng protobuf vì những lý do sau đây - Nó nhanh và gọn và nó đã kế thừa hỗ trợ C++ và Java. Các phiên bản không thực sự là một vấn đề. Tôi không nhớ mã được tạo ra, trên thực tế - tôi không quan tâm đến tất cả những gì đang được tạo ra. Tôi chỉ muốn mã được tạo để hoạt động trên các POCO hoặc POJO của tôi. Tôi có thể viết một cái gì đó như thế này bản thân mình và tôi chỉ muốn chắc chắn rằng điều này chưa được thực hiện. – Vadim

+0

Bộ đệm giao thức của Google sẽ luôn tạo mã (đó là lý do bạn cần quan tâm) và sẽ không bao giờ hoạt động trên POCO hoặc POJO của bạn. Vì vậy, nó có thể không phù hợp với bạn. Tôi không biết về bất kỳ thư viện tuần tự hóa nào sẽ hoạt động trên các POCO của bạn. –