return_value_policy.qbk 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. [section boost/python/return_value_policy.hpp]
  2. [section Introduction]
  3. return_value_policy instantiations are simply models of [link concepts.callpolicies `CallPolicies`] which are composed of a [link concepts.resultconverter.resultconvertergenerator_concept `ResultConverterGenerator`] and optional `Base` [link concepts.callpolicies `CallPolicies`].
  4. [endsect]
  5. [section Class template `return_value_policy`]
  6. [table
  7. [[Parameter][Requirements][Default]]
  8. [[ResultConverterGenerator][A model of [link concepts.resultconverter.resultconvertergenerator_concept `ResultConverterGenerator`]][]]
  9. [[Base][A model of [link concepts.callpolicies `CallPolicies`]][default_call_policies]]
  10. ]
  11. ``
  12. namespace boost { namespace python
  13. {
  14. template <class ResultConverterGenerator, class Base = default_call_policies>
  15. struct return_value_policy : Base
  16. {
  17. typedef ResultConverterGenerator result_converter;
  18. };
  19. }}
  20. ``
  21. [endsect]
  22. [section Example]
  23. C++ module definition:
  24. ``
  25. #include <boost/python/module.hpp>
  26. #include <boost/python/class.hpp>
  27. #include <boost/python/copy_const_reference.hpp>
  28. #include <boost/python/return_value_policy.hpp>
  29. // classes to wrap
  30. struct Bar { int x; }
  31. struct Foo {
  32. Foo(int x) : { b.x = x; }
  33. Bar const& get_bar() const { return b; }
  34. private:
  35. Bar b;
  36. };
  37. // Wrapper code
  38. using namespace boost::python;
  39. BOOST_PYTHON_MODULE(my_module)
  40. {
  41. class_<Bar>("Bar");
  42. class_<Foo>("Foo", init<int>())
  43. .def("get_bar", &Foo::get_bar
  44. , return_value_policy<copy_const_reference>())
  45. ;
  46. }
  47. ``
  48. Python code:
  49. ``
  50. >>> from my_module import *
  51. >>> f = Foo(3) # create a Foo object
  52. >>> b = f.get_bar() # make a copy of the internal Bar object
  53. ``
  54. [endsect]
  55. [endsect]