2011-05-08 2 views
0

부스트 파이썬에 관해 질문이 있습니다. 나는 프로젝트의 일부 기능을 파이썬으로 내보내는 작업을 해왔으며 다음과 같은 문제를 해결할 방법을 찾지 못했습니다. 게임 전체에 걸쳐 저장하고 사용하는 StatusEffect 개체가 있습니다. 게임을 시작할 때 상태 효과 개체 집합을 채우거나 추가 할 python 스크립트를 호출 할 수 있어야합니다. StatusEffect 클래스를 노출하는 데 아무런 문제가 없으며 파이썬 클래스를 파생시키고 스크립트를 호출합니다.shared_ptr을 boost :: python으로 인스턴스화

문제는 내가 StatusEffect 내가 어떻게 옆으로 정적을 추가하는 방법에서 boost::shared_ptr<StatusEffect>의 새로운 인스턴스를 생성하는 생성자의 많은 감안할 때 여기 http://wiki.python.org/moin/boost.python/PointersAndSmartPointers을 설명 방법을 만들 생각이없는 std::vector<boost::shared_ptr<StatusEffect> > Effects; 에서 객체 있음을 저장하고있어 것입니다 그리고 내가 가진 파생 된 클래스의 다양한, 이것은 최적의 솔루션이 아닌 것 같습니다. boost :: shared_ptr의 인스턴스를 StatusEffect 객체의 생성자를 사용하여 직접 생성하고 벡터에 추가 할 수 있기를 바랍니다. 이것이 가능한가?

답변이나 몇 가지 유용한 제안이 도움이 될 것입니다. 나는 어제 simialr 질문을했지만 불행히도 많은 도움이되지 못했습니다.

미리 감사드립니다.

답변

2

고객님의 질문을 이해하시기 바랍니다. http://wiki.python.org/moin/boost.python/PointersAndSmartPointers에서와 같이이 shared_ptr와 파이썬 클래스를 선언 할 경우, boost::python가 자동으로 필요한 (당신이 인수로 const shared_ptr<StatusEffect>& 또는 shared_ptr<StatusEffect>를받는 함수를 -ing .def하여이 예를 시도 할 경우 shared_ptr<StatusEffect>에 파이썬에서 만든 StatusEffect 개체를 변환 할 것 파이썬에서 만든 StatusEffect 인스턴스를 호출합니다.

당신이 유형 vector<shared_ptr<StatusEffect> >의 속성을 지정하려면, 당신이이 문서에 설명 된 것, (다시 파이썬 시퀀스에서, 그리고) 그것을 위해 컨버터를 작성해야합니다. 예를 들어, c++ to python 참조 변환기 템플릿 (120 행), python을 C++ 템플릿 (127 행)으로 변환 한 다음 시퀀스에 포함 된 다양한 유형 (shared_ptr 포함)에 사용 (라인 212).

다음과 같이 쓸 수 있습니다. yourObject.listOfStatusEffects=[StatusEffect(),StatusEffect(),StatusEffect()]

관련 문제