2017-01-23 38 views
1

C++ (공용 생성자 없음, C++ 프로그래머는 class.instance()를 호출하여 싱글 톤을 작성하거나 기존 싱글을 리턴 함)에서 싱글 톤 클래스를가집니다.pybind11을 사용하여 싱글 톤 클래스를 래핑하는 방법은 무엇입니까?

파이썬 수준에서 이것을 숨기고 싶습니다. 만약 내가 파이썬 싱글 톤을 쓰고 있었다면, 나는 __new__에서 그것을 처리 할 것이다. 클래스에 공용 생성자가없는 경우 __init__ 래퍼를 만들 수 있다고 생각하지 않습니다 (내 시도가 실패했습니다). 필자는 pybind11 문서에서 __new__에 대한 언급을 보지 못했지만 (누락되었을 수도 있지만, Google은 elide를 기쁘게 생각합니다. __new__에 대한 언급이없는 "새"를 포함하는 돌아 가기 페이지를 강조합니다).

pybind11 (또는 심지어 Boost.Python)을위한 싱글 톤 레시피가 있습니까?

답변

1

당신은 __init__을 노출 할 필요가 없습니다 :

사용 noncopyable 및/또는 no_init는 (귀하의 질문은 ... 읽고 "또는 Boost.Python") 파이썬에서 클래스를 인스턴스화하지 마십시오. 질문에 대해서는 다음과 같이 시도해보십시오.

py::class_<CppSingle>(mod, "Single") 
.def_static("__new__", [](py:object) { return CppSingle::instance();)}, 
py::return_value_policy::reference_internal);