<!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_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_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_const_reference-spec">Class
          <code>copy_const_reference</code></a></dt>

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

              <dt><a href="#copy_const_reference-spec-metafunctions">Class
              <code>copy_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_const_reference-spec"></a>Class
    <code>copy_const_reference</code></h3>

    <p><code>copy_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-const
    type such that the referenced value is copied into a new Python
    object.</p>

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

    <h4><a name="copy_const_reference-spec-metafunctions"></a>Class
    <code>copy_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 const&amp;</code> for
      some <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>

    <h3>C++ Module Definition</h3>
<pre>
#include &lt;boost/python/module.hpp&gt;
#include &lt;boost/python/class.hpp&gt;
#include &lt;boost/python/copy_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 const&amp; get_bar() const { 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_const_reference&gt;())
       ;
}
</pre>

    <h3>Python Code</h3>
<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>

