<copy_const_reference>является модельюResultConverterGenerator, которые могут быть использованы для обертывания функций C++, возвращающих тип отсылки к содержимому таким образом, что указанное значение копируется в новый объект Python.
<copy_non_const_reference>является модельюResultConverterGenerator, которая может быть использована для обертывания функций C++, возвращающих тип «ссылка-не-конст», так что указанное значение копируется в новый объект Python.
<manage_new_object>является модельюResultConverterGenerator, которая может быть использована для обертывания функций C++, которые возвращают указатель на объект, выделенный с новым выражением, и ожидают, что абонент возьмет на себя ответственность за удаление этого объекта.
<reference_existing_object>является модельюResultConverterGenerator, которая может использоваться для обертывания функций C++, которые возвращают ссылку или указатель на объект C++. Когда функция обертывания называется, значение, на которое ссылается его обратное значение, не копируется. Создается новый объект Python, который содержит указатель на референт, и не предпринимается никаких попыток гарантировать, что срок службы референта по крайней мере такой же, как у соответствующего объекта Python. Таким образом, может бытьочень опасноиспользовать<reference_existing_object>без дополнительного пожизненного управления от таких моделейCallPolicies, как<with_custodian_and_ward>. Этот класс используется в реализации<return_internal_reference>.
<typedefto_python_indirect<T,V>type;>, где V - класс, статическая функция исполнения которого конструирует держатель экземпляра, содержащий непринадлежащий<U*>, указывающий на референт возвращаемого значения обернутой функции.
#include<boost/python/module.hpp>#include<boost/python/class.hpp>#include<boost/python/reference_existing_object.hpp>#include<boost/python/return_value_policy.hpp>#include<utility>// classes to wrapstructSingleton{Singleton():x(0){}intexchange(intn)// set x and return the old value{std::swap(n,x);returnn;}intx;};Singleton&get_it(){staticSingletonjust_one;returnjust_one;}// Wrapper codeusingnamespaceboost::python;BOOST_PYTHON_MODULE(singleton){def("get_it",get_it,return_value_policy<reference_existing_object>());class_<Singleton>("Singleton").def("exchange",&Singleton::exchange);}
<return_by_value>является модельюResultConverterGenerator, которая может быть использована для обертывания функций C++, возвращающих любой тип ссылки или значения, так что возвращаемое значение копируется в новый объект Python.
#include<boost/python/module.hpp>#include<boost/python/class.hpp>#include<boost/python/return_by_value.hpp>#include<boost/python/return_value_policy.hpp>// classes to wrapstructBar{};Barglobal_bar;// functions to wrap:Barb1();Bar&b2();Barconst&b3();// Wrapper codeusingnamespaceboost::python;template<classR>voiddef_void_function(charconst*name,R(*f)()){def(name,f,return_value_policy<return_by_value>());}BOOST_PYTHON_MODULE(my_module){class_<Bar>("Bar");def_void_function("b1",b1);def_void_function("b2",b2);def_void_function("b3",b3);}
Return_opaque_pointer - это модельResultConverterGenerator, которая может использоваться для обертывания функций C++, возвращающих указатели к неопределенным типам, таким образом, что возвращаемое значение копируется в новый объект Python.
В дополнение к определению политики<return_opaque_pointer>макрос<BOOST_PYTHON_OPAQUE_SPECIALIZED_TYPE_ID>должен использоваться для определения специализации.<type_id>функция по типу, указанному обратным указателем.
"""
>>> from opaque_ext import *
>>> #
>>> # Check for correct conversion
>>> use(get())
>>> failuse(get())
Traceback (most recent call last):
...
RuntimeError: success
>>> #
>>> # Check that there is no conversion from integers ...
>>> use(0)
Traceback (most recent call last):
...
TypeError: bad argument type for built-in operation
>>> #
>>> # ... and from strings to opaque objects
>>> use("")
Traceback (most recent call last):
...
TypeError: bad argument type for built-in operation
"""defrun(args=None):importsysimportdoctestifargsisnotNone:sys.argv=argsreturndoctest.testmod(sys.modules.get(__name__))if__name__=='__main__':print"running..."importsyssys.exit(run()[0])
Статья Models of ResultConverterGenerator раздела Boost.Python Reference Manual Chapter 4. Function Invocation and Creation может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.