我有一个单例(来自boost :: serialization):
class LogManager : public boost::serialization::singleton<LogManager> { ... };
获取实例的包装器:
inline LogManager &logManager() { return LogManager::get_mutable_instance(); }
将此绑定到boost.python模块的正确方法是什么?
我试过了:
class_< LogManager, boost::serialization::singleton<LogManager> >("LogManager", no_init)
...
;
结果 - 控制台中出现了很多丑陋的错误文本。怎么了?
答案 0 :(得分:4)
除了在第二个参数中使用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)
答案 1 :(得分:1)
您希望bp::bases< boost::serialization::singleton<LogManager> >
作为第二个模板参数。