如何使用 pybind11 包装单例类?

smo*_*aro 7 pybind11

我有一个 C++ 中的单例类(没有公共构造函数,C++ 程序员调用 class.instance() 来创建单例或返回现有的单例)。

我更愿意在 Python 级别隐藏它。如果我正在编写一个 Python 单例,我会在__new__. 如果一个类没有公共构造函数,我认为我无法创建__init__包装器(我的尝试失败了)。我在 pybind11 文档中没有看到提及__new__(尽管可能错过了它,并且 Google 似乎很乐意省略下划线包含“new”的返回页面,但没有提及__new__)。

pybind11(甚至Boost.Python)有单例配方吗?

Chr*_*uns 0

我不确定 pybind11,但我相信应该可以使用 Boost.Python 包装您的类。(你的问题是“或者甚至Boost.Python”......)

使用noncopyable和/或no_init

class_<Klass, boost::noncopyable>("Klass", no_init)
    .staticmethod("instance")
    ;
Run Code Online (Sandbox Code Playgroud)

https://mail.python.org/pipermail/cplusplus-sig/2004-March/006647.html