我在MsgPack C headers中看到了“zone”的参考文献,但找不到有关它是什么或其用途的文档。它是什么?此外,C API的函数文档在哪里?
我在MsgPack C headers中看到了“zone”的参考文献,但找不到有关它是什么或其用途的文档。它是什么?此外,C API的函数文档在哪里?
从我所了解的情况来看,它是一种仅限移动类型,用于存储msgpack::object
的实际数据。它很可能是一种实现细节,但有时会泄漏到用户代码中。例如,每当您想在lambda中捕获msgpack::object
时,您必须同时捕获msgpack::zone
对象。有时您无法使用移动捕获(例如,在某些情况下,asio处理程序只能使用可复制处理程序,或者您的编译器不支持该功能)。为了解决这个问题,您可以:
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
}));
}