Cython:不公开部分实现

Posted

技术标签:

【中文标题】Cython:不公开部分实现【英文标题】:Cython: Not exposing parts of the implementation 【发布时间】:2017-06-08 19:08:16 【问题描述】:

我正在为 C++ 中的一些代码制作 cython 集成模型,我有以下问题:

我可以选择不公开我的内部实现部分吗?

例如:

myclass.hpp

class MyClass 
  private:
   foo _bar;
  public:
   do_stuff();
;

我选择故意从 cython 模块中省略 _bar,因为它在实现内部

myclass.pyx

cdef extern from "myclass.hpp":
    cdef cppclass MyClass:
        cdef public void do_stuff()

【问题讨论】:

您这样做有没有遇到任何特殊的问题? 我还在尝试编译这个简单的例子,所以我不确定。 cython 文档让我很困惑。 因此,如果您在编译时遇到任何问题,请在您的问题中明确提及这些内容。理想情况下是minimal reproducible example。 我的问题在物理上尽可能明确。 Cython 文档从未明确说明您是否可以不公开部分实现。 【参考方案1】:

是的,您可以省略实现细节。

你的 Cython 代码做了两件事

    它包含“myclass.hpp”,以便 C++ 编译器可以访问必要的实现细节。 它告诉 Cython 你想要使用的特定方法、属性或子类(等)(在你的情况下为do_stuff)。不告诉 Cython 方法/详细信息的唯一后果是您无法直接从 Cython 访问它。

【讨论】:

以上是关于Cython:不公开部分实现的主要内容,如果未能解决你的问题,请参考以下文章

如何从 cython 公开静态 constexpr

使用 cython 向 python 公开一个 c++ 函数

如何使用 Cython 向 Python 公开返回 C++ 对象的函数?

使用 Cython 向另一个应用程序公开功能

如何在 Cython 中返回新的 C++ 对象?

如何最好地将 C++/Cython 项目编译成可执行文件?