2012-10-16 18 views
6

Tôi đã thấy các tham chiếu đến 'zone' trong MsgPack C headers, nhưng không tìm thấy tài liệu nào về nó là gì hoặc nó là gì. Nó là gì? Hơn nữa, tài liệu chức năng theo chức năng của API C ở đâu?MsgPack 'zone'

+0

tôi khuyên bạn nên đọc [tài liệu riêng] của nó (https://github.com/msgpack/msgpack/blob/master/README.md) ở vị trí đầu tiên ... –

+0

Bạn đang trỏ tôi đến msgpack.org? Nếu vậy, tôi đã không thể tìm thấy bất kỳ mô tả hữu ích của các khu vực có một trong hai. Google tìm thấy một vài tham chiếu nhưng không có gì hữu ích: https://www.google.com/search?q=zone+site%3Amsgpack.org&aq=f&sugexp=chrome,mod=10&sourceid=chrome&ie=UTF-8 – brooks94

+0

không. Truy cập vào liên kết, đó là readme của dự án GitHub. –

Trả lời

3

msgpack_zone là cấu trúc bên trong được sử dụng để quản lý bộ nhớ & vòng đời tại thời gian giải nén. Tôi sẽ nói rằng bạn sẽ không bao giờ phải tương tác với nó nếu bạn sử dụng giao diện cấp cao tiêu chuẩn cho unpacking hoặc phiên bản streaming thay thế. Theo tôi, không có tài liệu chi tiết: thay vào đó bạn nên tham khảo bộ thử nghiệm cung cấp các mẫu mã thuận tiện để đạt được các tác vụ phổ biến, ví dụ: xem pack_unpack_c.ccstreaming_c.cc.

0

Từ những gì tôi có thể thu thập, đó là loại di chuyển duy nhất lưu trữ dữ liệu thực tế của msgpack::object. Nó rất tốt có thể là một chi tiết thực hiện, nhưng nó thực sự bị rò rỉ vào mã của người dùng đôi khi. Ví dụ: bất cứ lúc nào bạn muốn chụp msgpack::object trong lambda, bạn cũng phải chụp đối tượng msgpack::zone. Đôi khi bạn không thể sử dụng tính năng chụp di chuyển (ví dụ: trình xử lý asio trong một số trường hợp sẽ chỉ sử dụng các trình xử lý có thể sao chép hoặc trình biên dịch của bạn không hỗ trợ tính năng này). Để làm việc xung quanh này, bạn có thể:

msgpack::unpacked r; 
while (pac_.next(&r)) { 
    auto msg = result.get(); 
    io_->post([this, msg, z = std::shared_ptr<msgpack::zone>(r.zone().release())]() { 
       // msg is valid here    
      })); 
} 
Các vấn đề liên quan