我在MsgPack C headers中看到了对'zone‘的引用,但找不到关于它是什么或它是用来做什么的文档。那是什么?此外,C API的逐个函数文档在哪里?
发布于 2012-10-17 16:26:28
发布于 2016-02-14 03:55:08
据我所知,它是一种仅限移动的类型,用于存储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
}));
}https://stackoverflow.com/questions/12921281
复制相似问题