Увеличить экспорт Python синглтон - PullRequest
3 голосов
/ 14 марта 2011

У меня есть синглтон (от 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 ]

4 голосов
/ 14 марта 2011

В дополнение к использованию 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 голос
/ 14 марта 2011

Вместо этого вы хотите bp::bases< boost::serialization::singleton<LogManager> > в качестве второго параметра шаблона.

...