代码之家  ›  专栏  ›  技术社区  ›  Begtostudy

如何使用API将map<string,string>传递到py中?

  •  0
  • Begtostudy  · 技术社区  · 15 年前

    C/C++可以使用Python API加载PY。

    但是,只支持简单类型。

    如何将map传递到py中,使其成为带有api的dict?

    或者,哪种方法更好?

    2 回复  |  直到 15 年前
        1
  •  0
  •   Alex Martelli    15 年前

    Python C API支持C级功能(而不是C++级)——基本上,您可以轻松地将Python暴露在一个 extern C 块(不包括 std::map &对于其他东西,你需要做更多的工作。这项工作的性质取决于您用什么来包装Python消费的C++代码——有很多选项,包括裸露的C API、SWIG、SIP、Boost Python、Cython、……

    在bare c api中(从您的问题和标签来看,我假设您使用的是这个API),我建议您 making a custom object type --也许,现在,一个子类 collections.Mapping ( MutableMapping 当然,如果是可变的,就像在Python中实现映射时那样——并实现 Mapping Object Structures 加上一个将军所需要的部分 type structure tp_iter tp_iternext 槽。

    当然,关键的想法是通过简单地委托给您选择的人,您将实现项目设置和获取,以及迭代。 STD::地图 并且执行所需的类型转换和低级修改(对象分配、引用计数),后者是用于扩展python的高级框架从本质上避免了您必须执行的操作,但是“包装和委托”底层架构不会有太大的变化。

        2
  •  1
  •   Eli Bendersky    15 年前

    使用 SWIG ,它有 some ready-made templates 适用于各种STL类型。 See this 例如。