我在MsgPack C 标头中看到了对“区域”的引用,但找不到关于它是什么或它的用途的文档。它是什么?此外,C API 的函数文档在哪里?
问问题
1620 次
2 回答
0
据我所知,它是一种仅移动类型,用于存储 a 的实际数据msgpack::object
。它很可能打算成为一个实现细节,但它实际上有时会泄漏到用户的代码中。例如,任何时候你想msgpack::object
在 lambda 中捕获 a,你也必须捕获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
}));
}
于 2016-02-13T19:55:07.513 回答