2012-03-06 2 views
4

나는 이벤트를 파이썬 객체에 전달하는 C++ 코드가있다. 옵저버는 weak_ptr으로 유지되므로 등록을 취소 할 필요가 없습니다.C 확장에서 CPython 객체의 수명 추적

이것은 C++에서 작동하지만 약한 포인터와 파이썬 약한 참조를 연결하는 것이 번거롭다 (파이썬 이벤트 핸들러가 C++ 코드와 마찬가지로 구독에 의해 유지되지 않도록하고 싶다). 라이브 관찰자를 가지기 위해서는 객체가 살아있는 동안 포인터가 공유 포인터를 가질 필요가 있습니다. 그래서 관찰자가 파이썬 토지를 제어 할 때 C++ 옵저버 객체의 수명을 갖게됩니다.

내가 지금까지 생각해 왔던 접근법은 상당한 양의 상용구 및 중간 객체를 필요로합니다 (예 : C++ 관측자를 유지하고 Python 관찰자에 대한 약한 참조를 유지하고 구성원으로 설정하는 등의 다른 PyTypeObject를 생성하는 등) 파이썬 관찰자의, 그래서 그것으로 죽는다).

질문은 명확한 방법이 있습니까?

답변

0

나는 파이썬 래퍼를 C++ 모듈에 작성하고 파이썬 래퍼의 파이썬 관찰자에게 전달할 것이다. 충분하니?

뭔가 공유 포인터가 필요하다고 언급하면, 관찰자가 반환 할 때까지 해당 공유 포인터가 스택에 있으면 충분합니까?