You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
`copy_const_reference` is a model of [link concepts.resultconverter.resultconvertergenerator_concept ResultConverterGenerator] which can be used to wrap C++ functions returning a reference-to-const type such that the referenced value is copied into a new Python object.
``
namespace boost { namespace python
{
struct copy_const_reference
{
template <class T> struct apply;
};
}}
``
[endsect]
[section Class `copy_const_reference` metafunctions]
``template <class T> struct apply``
[variablelist
[[Requires][`T` is `U const&` for some `U`.]]
[[Returns][`typedef to_python_value<T> type;`]]
]
[endsect]
[section Example]
C++ module definition:
``
#include <boost/python/module.hpp>
#include <boost/python/class.hpp>
#include <boost/python/copy_const_reference.hpp>
#include <boost/python/return_value_policy.hpp>
// classes to wrap
struct Bar { int x; }
struct Foo {
Foo(int x) : { b.x = x; }
Bar const& get_bar() const { return b; }
private:
Bar b;
};
// Wrapper code
using namespace boost::python;
BOOST_PYTHON_MODULE(my_module)
{
class_<Bar>("Bar");
class_<Foo>("Foo", init<int>())
.def("get_bar", &Foo::get_bar
, return_value_policy<copy_const_reference>())
;
}
``
Python code:
``
>>> from my_module import *
>>> f = Foo(3) # create a Foo object
>>> b = f.get_bar() # make a copy of the internal Bar object