Boost.Python을 통해 내 C++ 클래스를 노출합니다. 내 의도는 내부 참조가있는 사용자 정의 클래스 유형의 멤버 변수를 노출하는 것입니다. boost :: type의 멤버 변수를 도입하기로 결정하기 전까지는 잘 작동했습니다. optional <T>.Exposing boost :: optional <T> Boost.Python을 통해 내부 참조 또는 없음
부스트를 노출하는 방법을 보여주는 몇 가지 훌륭한 게시물이 있습니다. 선택 사항 : <T>. 특히 this converter을 구현했습니다. 내 코드의 기타 관련 부분은 다음과 같이 :
struct Bar {}
struct Foo {
boost::optional<Bar> bar;
}
BOOST_PYTHON_MODULE(mymodule) {
using namespace boost::python;
python_optional<Bar>(); //registering the converter
class_<Foo>("Foo")
.add_property ("bar", make_getter(&Foo::bar, return_value_policy<return_by_value>()), make_setter(&Foo::bar))
;
}
내가 return_value_policy<reference_existing_object>()
또는 return_internal_reference<>()
중 하나와 return_value_policy<return_by_value>()
를 교체했습니다.
>> import mymodule
>> foo = mymodule.Foo()
>> bar = foo.bar
TypeError: No Python class registered for C++ class boost::optional<Bar>
나의 이해는 내가 지금은 부스트 :: <T> 객체 선택에 대한 참조를 얻고 있다는 것입니다 : 둘 다 파이썬 형식 오류를 생산했다. 그러나 등록 된 변환기는 boost :: optional <T> 개체이며 해당 개체에 대한 참조가 아니기 때문에 호출되지 않습니다. 나는 변환기를 바꾸는 것에 대하여 생각했다. 그러나 나는 이것에 초보적이다. 그리고 나는 방법을 정말로 모른다. 어떤 제안?