###

# Boost.Python

## Header <boost/python/return_value_policy.hpp>

## Contents

Introduction
Classes
  Class Template `return_value_policy`
    Class Template `return_value_policy` synopsis
Example

## Introduction

`return_value_policy` instantiations are simply models of CallPolicies which are composed of a ResultConverterGenerator and optional `Base` CallPolicies.

## Classes

### Class template `return_value_policy`

`return_value_policy` template parameters
Parameter | Requirements | Default
--- | --- | ---
ResultConverterGenerator | A model of ResultConverterGenerator.
`Base` | A model of CallPolicies | `default_call_policies`

#### Class template `return_value_policy` synopsis

    namespace boost { namespace python
    {
      template <class ResultConverterGenerator, class Base = default_call_policies>
      struct return_value_policy : Base
      {
          typedef ResultConverterGenerator result_converter;
      };
    }}

## 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

Revised 13 November, 2002

© Copyright Dave Abrahams 2002.