提升python导出单例

时间:2011-03-14 13:27:05

标签: c++ python boost singleton

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

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

2 个答案:

答案 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> >作为第二个模板参数。