Boost.Python 如何拥有 C++ 类?
Posted
技术标签:
【中文标题】Boost.Python 如何拥有 C++ 类?【英文标题】:How does Boost.Python hold C++ class? 【发布时间】:2015-01-28 06:39:38 【问题描述】:我知道如何使用 Boost.Python 来包装暴露给 Python 的 C++ 类。 使用 Boost.Python 如此方便地进行包装,真的很强大。
然而,关于 Boost.Python 如何持有 C++ 类的细节很少被解释。
Boost.Python 的代码很难阅读或调试,因为它是以模板元编程方式编写的,所有东西都只是在编译时执行。我浏览了作者的文档和“使用 Boost Python 构建混合系统”一文,但没有找到答案。
那么,Boost.Python 是如何拥有 C++ 类的呢?
它是否将封装的 C++ 类实例作为 PyObject
的私有成员保存?包装类的所有继承、多态等特性是否都通过委托给持有的实例来模仿?
【问题讨论】:
【参考方案1】:那么,Boost.Python 是如何持有 C++ 类的呢?
为了迂腐,在 C++ 中,在运行时没有类,只有类的对象或实例。
Boost 类包装器通过值或智能指针保存您的 C++ 对象(目前仅支持已弃用的 std::auto_ptr
)。
不幸的是 boost.python 文档相当缺乏,这里有一些对你有用的链接:
http://www.boost.org/doc/libs/1_57_0/libs/python/test/select_holder.cpp http://www.boost.org/doc/libs/1_57_0/libs/python/test/auto_ptr.cpp http://www.boost.org/doc/libs/1_57_0/libs/python/doc/v2/faq.html#ownership【讨论】:
“目前仅支持已弃用的 std::auto_ptr” — 2021 年仍然如此吗?以上是关于Boost.Python 如何拥有 C++ 类?的主要内容,如果未能解决你的问题,请参考以下文章
使用boost.python,如何扩展类的__dir__函数?
使用 Boost Python 从 c++ 类创建派生的 Python 类