【问题标题】:What is a MsgPack 'zone'什么是 MsgPack 'zone'
【发布时间】:2012-10-06 22:35:41
【问题描述】:

我在MsgPack C headers 中看到了对“区域”的引用,但找不到关于它是什么或它的用途的文档。它是什么?此外,C API 的函数文档在哪里?

【问题讨论】:

  • 我建议首先阅读它的own documentation...
  • 你是在指向我的 msgpack.org 吗?如果是这样,我也无法在那里找到任何有用的区域描述。谷歌找到了一些参考资料,但没有什么帮助:google.com/…
  • 不。访问链接,这是 GitHub 项目的自述文件。

标签: c msgpack


【解决方案1】:

msgpack_zone 是一个内部结构,用于解包时的内存管理和生命周期。如果您使用 unpacking 的标准高级界面或替代 streaming 版本,我会说您永远不必与它进行交互。

据我所知,没有详细的文档:相反,您应该参考提供方便的代码示例以实现常见任务的测试套件,例如见pack_unpack_c.ccstreaming_c.cc

【讨论】:

    【解决方案2】:

    据我所知,它是一种只移动类型,用于存储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            
                 }));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-17
      • 2021-08-25
      • 1970-01-01
      • 2018-05-08
      相关资源
      最近更新 更多