Я хочу сделать это правильно. Я видел разоблачение boost::serialization::singleton здесь, Boost python export singleton, но я не не хочу использовать это. Вместо этого я хочу использовать простой синглтон Мейерса.
Этот код ниже работает, но в документации говорится, что использование http://www.boost.org/doc/libs/1_43_0/libs/python/doc/v2/reference_existing_object.html#reference_existing_object-spec/ опасен.
Код:
class Singleton
{
private:
Singleton(){};
public:
static Singleton & getInstance()
{
static Singleton instance;
return instance;
}
int getNumber() { return 5; }
};
И в модуле:
class_<Singleton>("singleton", no_init)
.def("getInstance", &Singleton::getInstance, return_value_policy<reference_existing_object>()).staticmethod("getInstance")
.def("getNumber", &Singleton::getNumber)
;
Как это сделать? Использование return_internal_reference<>()
привело к ошибке при выполнении кода Python.