1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- [section boost/python/return_by_value.hpp]
- [section Class `return_by_value`]
- `return_by_value` is a model of [link concepts.resultconverter.resultconvertergenerator_concept ResultConverterGenerator] which can be used to wrap C++ functions returning any reference or value type such that the return value is copied into a new Python object.
- ``
- namespace boost { namespace python
- {
- struct return_by_value
- {
- template <class T> struct apply;
- };
- }}
- ``
- [endsect]
- [section Class `return_by_value` metafunctions]
- ``template <class T> struct apply``
- [variablelist
- [[Returns][`typedef to_python_value<T> type;`]]
- ]
- [endsect]
- [section Example]
- In C++:
- ``
- #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 wrap
- struct Bar { };
- Bar global_bar;
- // functions to wrap:
- Bar b1();
- Bar& b2();
- Bar const& b3();
- // Wrapper code
- using namespace boost::python;
- template <class R>
- void def_void_function(char const* 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);
- }
- ``
- Python code:
- ``
- >>> from my_module import *
- >>> b = b1() # each of these calls
- >>> b = b2() # creates a brand
- >>> b = b3() # new Bar object
- ``
- [endsect]
- [endsect]
|