c++ - boost python 导出单例

标签 c++ python boost singleton

我有一个单例(来自 boost::serialization):

class LogManager : public boost::serialization::singleton<LogManager> { ... };

和获取实例的包装器:

inline LogManager &logManager() { return LogManager::get_mutable_instance(); }

将它绑定(bind)到 boost.python 模块的正确方法是什么?

我试过:

class_< LogManager, boost::serialization::singleton<LogManager> >("LogManager", no_init)
    ...
;

结果 - 控制台中有很多丑陋的错误文本。怎么了?

最佳答案

除了使用bases<...>在 Autopulated 指出的第二个参数中,我想你也想指定 boost::noncopyable作为第三个模板参数,例如

bp::class_<LogManager, bp::bases<boost::serialization::singleton<LogManager> >, boost::noncopyable>("LogManager", bp::no_init)

编辑: 此外,您需要为列出的任何基类提供类声明,例如

bp::class_<boost::serialization::singleton<LogManager>, boost::noncopyable>("Singleton", bp::no_init)

或者,如果您不需要访问基类并且不会导出 boost::serialization::singleton<LogManager> 的任何其他子级,那么您可以省略首先指定基类。也就是说,如果您只想公开 LogManager,则以下声明就可以了类:

bp::class_<LogManager, boost::noncopyable>("LogManager", bp::no_init)

关于c++ - boost python 导出单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5299179/

相关文章:

c++ - 好的 Linux/Ubuntu OpenGL 教程?

c++ - boost.build 与 boost.python

c++ - 从 DLL 创建和加载对话框

python - 如何使用Python中的数学模块生成随机 float

c++ - 如何使用 qi 解析和验证有序的整数列表

c++ - 比较 boost::optional<T&> 和 const T&

c++ - C++异步键盘输入(标准方式)

python - 如何以编程方式在 apache beam python 中提供凭据?

python - 如何将嵌套列表拆分为更小的嵌套列表

c++ - intrusive_ptr 使用基类进行引用计数并包含循环 hell