我有一个单例(来自 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/