<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
  <head>
    <meta name="generator" content=
    "HTML Tidy for Windows (vers 1st August 2002), see www.w3.org">
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <link rel="stylesheet" type="text/css" href="../boost.css">

    <title>Boost.Python -
    &lt;boost/python/copy_non_const_reference.hpp&gt;</title>
  </head>

  <body>
    <table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
    "header">
      <tr>
        <td valign="top" width="300">
          <h3><a href="../../../../index.htm"><img height="86" width="277"
          alt="C++ Boost" src="../../../../boost.png" border="0"></a></h3>
        </td>

        <td valign="top">
          <h1 align="center"><a href="../index.html">Boost.Python</a></h1>

          <h2 align="center">Header
          &lt;boost/python/copy_non_const_reference.hpp&gt;</h2>
        </td>
      </tr>
    </table>
    <hr>

    <h2>Contents</h2>

    <dl class="page-index">
      <dt><a href="#classes">Classes</a></dt>

      <dd>
        <dl class="page-index">
          <dt><a href="#copy_non_const_reference-spec">Class
          <code>copy_non_const_reference</code></a></dt>

          <dd>
            <dl class="page-index">
              <dt><a href="#copy_non_const_reference-spec-synopsis">Class
              <code>copy_non_const_reference</code> synopsis</a></dt>

              <dt><a href=
              "#copy_non_const_reference-spec-metafunctions">Class
              <code>copy_non_const_reference</code> metafunctions</a></dt>
            </dl>
          </dd>
        </dl>
      </dd>

      <dt><a href="#examples">Example</a></dt>
    </dl>
    <hr>

    <h2><a name="classes"></a>Classes</h2>

    <h3><a name="copy_non_const_reference-spec"></a>Class
    <code>copy_non_const_reference</code></h3>

    <p><code>copy_non_const_reference</code> is a model of <a href=
    "ResultConverter.html#ResultConverterGenerator-concept">ResultConverterGenerator</a>
    which can be used to wrap C++ functions returning a
    reference-to-non-const type such that the referenced value is copied into
    a new Python object.</p>

    <h4><a name="copy_non_const_reference-spec-synopsis"></a>Class
    <code>copy_non_const_reference</code> synopsis</h4>
<pre>
namespace boost { namespace python
{
    struct copy_non_const_reference
    {
        template &lt;class T&gt; struct apply;
    };
}}
</pre>

    <h4><a name="copy_non_const_reference-spec-metafunctions"></a>Class
    <code>copy_non_const_reference</code> metafunctions</h4>
<pre>
template &lt;class T&gt; struct apply
</pre>

    <dl class="metafunction-semantics">
      <dt><b>Requires:</b> <code>T</code> is <code>U&amp;</code> for some
      non-const <code>U</code>.</dt>

      <dt><b>Returns:</b> <code>typedef <a href=
      "to_python_value.html#to_python_value-spec">to_python_value</a>&lt;T&gt;
      type;</code></dt>
    </dl>

    <h2><a name="examples"></a>Example</h2>

    <p>C++ code:</p>
<pre>
#include &lt;boost/python/module.hpp&gt;
#include &lt;boost/python/class.hpp&gt;
#include &lt;boost/python/copy_non_const_reference.hpp&gt;
#include &lt;boost/python/return_value_policy.hpp&gt;

// classes to wrap
struct Bar { int x; }

struct Foo {
   Foo(int x) : { b.x = x; }
   Bar&amp; get_bar() { return b; }
 private:
   Bar b;
};

// Wrapper code
using namespace boost::python;
BOOST_PYTHON_MODULE(my_module)
{
    class_&lt;Bar&gt;("Bar");

     class_&lt;Foo&gt;("Foo", init&lt;int&gt;())
        .def("get_bar", &amp;Foo::get_bar
            , return_value_policy&lt;copy_non_const_reference&gt;())
       ;
}
</pre>
    Python Code: 
<pre>
&gt;&gt;&gt; from my_module import *
&gt;&gt;&gt; f = Foo(3)         # create a Foo object
&gt;&gt;&gt; b = f.get_bar()    # make a copy of the internal Bar object
</pre>

    <p>Revised 
    <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
  13 November, 2002
  <!--webbot bot="Timestamp" endspan i-checksum="39359" -->
    </p>

    <p><i>&copy; Copyright <a href=
    "http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a> 2002.</i></p>
  </body>
</html>

