Boost Python 导出单例
我有一个单例(来自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 个回答
1
你想要把 bp::bases< boost::serialization::singleton<LogManager> >
作为第二个模板参数来使用。
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)