C++ boostpython导出单例

C++ boostpython导出单例,c++,python,boost,singleton,C++,Python,Boost,Singleton,我有一个单例(来自boost::serialization): 将其绑定到boost.python模块的正确方法是什么 我试过: class_< LogManager, boost::serialization::singleton<LogManager> >("LogManager", no_init) ... ; 类(“LogManager”,无初始化) ... ; 结果,控制台中出现了大量难看的错误文本。有什么问题吗?您希望将bp::base作为第二个模

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

将其绑定到boost.python模块的正确方法是什么

我试过:

class_< LogManager, boost::serialization::singleton<LogManager> >("LogManager", no_init)
    ...
;
类(“LogManager”,无初始化)
...
;

结果,控制台中出现了大量难看的错误文本。有什么问题吗?

您希望将
bp::base
作为第二个模板参数。

除了在第二个参数中使用AutoCompulated指出的
base
之外,我认为您还希望指定
boost::noncopyable
作为第三个模板参数,例如

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

就是这样:为什么要传递
boost::serialization::singleton
作为第二个模板参数?@autocompulated这是继承
LogManager
的父对象。ps:
bp::class(“LogManager”,bp::no_init)
啊,是的;请看Ray的回答:)这些错误是因为它试图将其公开为可复制构造,而您希望它不可复制。嗯,现在它可以编译了。但是3d参数做什么呢?但是当我导入我得到的模块时:
RuntimeError:extension class wrapper for base class boost::serialization::singleton尚未创建,据我所知
,它告诉boost::python不要为函数制作转换器,这些函数将按值返回包装类的实例。
class_< LogManager, boost::serialization::singleton<LogManager> >("LogManager", no_init)
    ...
;
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)
bp::class_<LogManager, boost::noncopyable>("LogManager", bp::no_init)