• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4<title>boost/python/handle.hpp</title>
5<link rel="stylesheet" href="../../boostbook.css" type="text/css">
6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7<link rel="home" href="../index.html" title="Boost.Python Reference Manual">
8<link rel="up" href="../utility_and_infrastructure.html" title="Chapter 7. Utility and Infrastructure">
9<link rel="prev" href="boost_python_pointee_hpp.html" title="boost/python/pointee.hpp">
10<link rel="next" href="boost_python_type_id_hpp.html" title="boost/python/type_id.hpp">
11</head>
12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="" width="" height="" src="../../images/boost.png"></td></tr></table>
14<hr>
15<div class="spirit-nav">
16<a accesskey="p" href="boost_python_pointee_hpp.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../utility_and_infrastructure.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="boost_python_type_id_hpp.html"><img src="../../images/next.png" alt="Next"></a>
17</div>
18<div class="section">
19<div class="titlepage"><div><div><h2 class="title" style="clear: both">
20<a name="utility_and_infrastructure.boost_python_handle_hpp"></a><a class="link" href="boost_python_handle_hpp.html" title="boost/python/handle.hpp">boost/python/handle.hpp</a>
21</h2></div></div></div>
22<div class="toc"><dl class="toc">
23<dt><span class="section"><a href="boost_python_handle_hpp.html#utility_and_infrastructure.boost_python_handle_hpp.introduction">Introduction</a></span></dt>
24<dt><span class="section"><a href="boost_python_handle_hpp.html#utility_and_infrastructure.boost_python_handle_hpp.class_template_handle">Class
25        template <code class="computeroutput"><span class="identifier">handle</span></code></a></span></dt>
26<dt><span class="section"><a href="boost_python_handle_hpp.html#utility_and_infrastructure.boost_python_handle_hpp.function_borrowed">Function
27        <code class="computeroutput"><span class="identifier">borrowed</span></code></a></span></dt>
28<dt><span class="section"><a href="boost_python_handle_hpp.html#utility_and_infrastructure.boost_python_handle_hpp.function_allow_null">Function
29        <code class="computeroutput"><span class="identifier">allow_null</span></code></a></span></dt>
30</dl></div>
31<div class="section">
32<div class="titlepage"><div><div><h3 class="title">
33<a name="utility_and_infrastructure.boost_python_handle_hpp.introduction"></a><a class="link" href="boost_python_handle_hpp.html#utility_and_infrastructure.boost_python_handle_hpp.introduction" title="Introduction">Introduction</a>
34</h3></div></div></div>
35<p>
36          &lt;boost/python/handle.hpp&gt; provides class template <code class="computeroutput"><span class="identifier">handle</span></code>,
37          a smart pointer for managing reference-counted Python objects.
38        </p>
39</div>
40<div class="section">
41<div class="titlepage"><div><div><h3 class="title">
42<a name="utility_and_infrastructure.boost_python_handle_hpp.class_template_handle"></a><a class="link" href="boost_python_handle_hpp.html#utility_and_infrastructure.boost_python_handle_hpp.class_template_handle" title="Class template handle">Class
43        template <code class="computeroutput"><span class="identifier">handle</span></code></a>
44</h3></div></div></div>
45<div class="toc"><dl class="toc">
46<dt><span class="section"><a href="boost_python_handle_hpp.html#utility_and_infrastructure.boost_python_handle_hpp.class_template_handle.class_template_handle_constructo">Class
47          template <code class="computeroutput"><span class="identifier">handle</span></code> constructors
48          and destructor</a></span></dt>
49<dt><span class="section"><a href="boost_python_handle_hpp.html#utility_and_infrastructure.boost_python_handle_hpp.class_template_handle.class_template_handle_modifiers">Class
50          template <code class="computeroutput"><span class="identifier">handle</span></code> modifiers</a></span></dt>
51<dt><span class="section"><a href="boost_python_handle_hpp.html#utility_and_infrastructure.boost_python_handle_hpp.class_template_handle.class_template_handle_observers">Class
52          template <code class="computeroutput"><span class="identifier">handle</span></code> observers</a></span></dt>
53</dl></div>
54<p>
55          <code class="computeroutput"><span class="identifier">handle</span></code> is a smart pointer
56          to a Python object type; it holds a pointer of type <code class="computeroutput"><span class="identifier">T</span><span class="special">*</span></code>, where <code class="computeroutput"><span class="identifier">T</span></code>
57          is its template parameter. T must be either a type derived from <code class="computeroutput"><span class="identifier">PyObject</span></code> or a <a class="link" href="../glossary.html#pod">POD</a>
58          type whose initial <code class="computeroutput"><span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">PyObject</span><span class="special">)</span></code> bytes are layout-compatible with <code class="computeroutput"><span class="identifier">PyObject</span></code>. Use <code class="computeroutput"><span class="identifier">handle</span><span class="special">&lt;&gt;</span></code> at the boundary between the Python/'C'
59          API and high-level code; prefer object for a generalized interface to Python
60          objects.
61        </p>
62<p>
63          In this document, the term "upcast" refers to an operation which
64          converts a pointer <code class="computeroutput"><span class="identifier">Y</span><span class="special">*</span></code>
65          to a base class <code class="computeroutput"><span class="identifier">pointer</span> <span class="identifier">T</span><span class="special">*</span></code> via
66          <code class="computeroutput"><span class="keyword">static_cast</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">*&gt;</span></code>
67          if <code class="computeroutput"><span class="identifier">Y</span></code> is derived from <code class="computeroutput"><span class="identifier">T</span></code>, or via C-style cast (<code class="computeroutput"><span class="identifier">T</span><span class="special">*</span></code>) if
68          it is not. However, in the latter case the "upcast" is ill-formed
69          if the initial <code class="computeroutput"><span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">PyObject</span><span class="special">)</span></code>
70          bytes of <code class="computeroutput"><span class="identifier">Y</span></code> are not layout-compatible
71          with <code class="computeroutput"><span class="identifier">PyObject</span></code>.
72        </p>
73<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">python</span>
74<span class="special">{</span>
75  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
76  <span class="keyword">class</span> <span class="identifier">handle</span>
77  <span class="special">{</span>
78      <span class="keyword">typedef</span> <span class="identifier">unspecified</span><span class="special">-</span><span class="identifier">member</span><span class="special">-</span><span class="identifier">function</span><span class="special">-</span><span class="identifier">pointer</span> <span class="identifier">bool_type</span><span class="special">;</span>
79
80   <span class="keyword">public</span><span class="special">:</span> <span class="comment">// types</span>
81      <span class="keyword">typedef</span> <span class="identifier">T</span> <span class="identifier">element_type</span><span class="special">;</span>
82
83   <span class="keyword">public</span><span class="special">:</span> <span class="comment">// member functions</span>
84      <span class="special">~</span><span class="identifier">handle</span><span class="special">();</span>
85
86      <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Y</span><span class="special">&gt;</span>
87      <span class="keyword">explicit</span> <span class="identifier">handle</span><span class="special">(</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">borrowed</span><span class="special">&lt;</span><span class="identifier">null_ok</span><span class="special">&lt;</span><span class="identifier">Y</span><span class="special">&gt;</span> <span class="special">&gt;*</span> <span class="identifier">p</span><span class="special">);</span>
88
89      <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Y</span><span class="special">&gt;</span>
90      <span class="keyword">explicit</span> <span class="identifier">handle</span><span class="special">(</span><span class="identifier">null_ok</span><span class="special">&lt;</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">borrowed</span><span class="special">&lt;</span><span class="identifier">Y</span><span class="special">&gt;</span> <span class="special">&gt;*</span> <span class="identifier">p</span><span class="special">);</span>
91
92      <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Y</span><span class="special">&gt;</span>
93      <span class="keyword">explicit</span> <span class="identifier">handle</span><span class="special">(</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">borrowed</span><span class="special">&lt;</span><span class="identifier">Y</span><span class="special">&gt;*</span> <span class="identifier">p</span><span class="special">);</span>
94
95      <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Y</span><span class="special">&gt;</span>
96      <span class="keyword">explicit</span> <span class="identifier">handle</span><span class="special">(</span><span class="identifier">null_ok</span><span class="special">&lt;</span><span class="identifier">Y</span><span class="special">&gt;*</span> <span class="identifier">p</span><span class="special">);</span>
97
98      <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Y</span><span class="special">&gt;</span>
99      <span class="keyword">explicit</span> <span class="identifier">handle</span><span class="special">(</span><span class="identifier">Y</span><span class="special">*</span> <span class="identifier">p</span><span class="special">);</span>
100
101      <span class="identifier">handle</span><span class="special">();</span>
102
103      <span class="identifier">handle</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">handle</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">r</span><span class="special">);</span>
104
105      <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Y</span><span class="special">&gt;</span>
106      <span class="identifier">handle</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">handle</span><span class="special">&lt;</span><span class="identifier">Y</span><span class="special">&gt;</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">r</span><span class="special">);</span> <span class="comment">// never throws</span>
107
108
109      <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Y</span><span class="special">&gt;</span>
110      <span class="identifier">handle</span><span class="special">(</span><span class="identifier">handle</span><span class="special">&lt;</span><span class="identifier">Y</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">r</span><span class="special">);</span>
111
112      <span class="identifier">handle</span><span class="special">(</span><span class="identifier">handle</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">r</span><span class="special">);</span>
113
114      <span class="identifier">T</span><span class="special">*</span> <span class="keyword">operator</span><span class="special">-&gt;</span> <span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
115      <span class="identifier">T</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">*</span> <span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
116      <span class="identifier">T</span><span class="special">*</span> <span class="identifier">get</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
117      <span class="keyword">void</span> <span class="identifier">reset</span><span class="special">();</span>
118      <span class="identifier">T</span><span class="special">*</span> <span class="identifier">release</span><span class="special">();</span>
119
120      <span class="keyword">operator</span> <span class="identifier">bool_type</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> <span class="comment">// never throws</span>
121   <span class="keyword">private</span><span class="special">:</span>
122      <span class="identifier">T</span><span class="special">*</span> <span class="identifier">m_p</span><span class="special">;</span>
123  <span class="special">};</span>
124
125  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">null_ok</span><span class="special">;</span>
126  <span class="keyword">namespace</span> <span class="identifier">detail</span> <span class="special">{</span> <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">borrowed</span><span class="special">;</span> <span class="special">}</span>
127<span class="special">}}</span>
128</pre>
129<div class="section">
130<div class="titlepage"><div><div><h4 class="title">
131<a name="utility_and_infrastructure.boost_python_handle_hpp.class_template_handle.class_template_handle_constructo"></a><a class="link" href="boost_python_handle_hpp.html#utility_and_infrastructure.boost_python_handle_hpp.class_template_handle.class_template_handle_constructo" title="Class template handle constructors and destructor">Class
132          template <code class="computeroutput"><span class="identifier">handle</span></code> constructors
133          and destructor</a>
134</h4></div></div></div>
135<pre class="programlisting"><span class="keyword">virtual</span> <span class="special">~</span><span class="identifier">handle</span><span class="special">();</span></pre>
136<div class="variablelist">
137<p class="title"><b></b></p>
138<dl class="variablelist">
139<dt><span class="term">Effects</span></dt>
140<dd><p>
141                  <code class="computeroutput"><span class="identifier">Py_XDECREF</span><span class="special">(</span><span class="identifier">upcast</span><span class="special">&lt;</span><span class="identifier">PyObject</span><span class="special">*&gt;(</span><span class="identifier">m_p</span><span class="special">))</span></code>
142                </p></dd>
143</dl>
144</div>
145<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Y</span><span class="special">&gt;</span>
146<span class="keyword">explicit</span> <span class="identifier">handle</span><span class="special">(</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">borrowed</span><span class="special">&lt;</span><span class="identifier">null_ok</span><span class="special">&lt;</span><span class="identifier">Y</span><span class="special">&gt;</span> <span class="special">&gt;*</span> <span class="identifier">p</span><span class="special">);</span>
147</pre>
148<div class="variablelist">
149<p class="title"><b></b></p>
150<dl class="variablelist">
151<dt><span class="term">Effects</span></dt>
152<dd><pre class="programlisting"><span class="identifier">Py_XINCREF</span><span class="special">(</span><span class="identifier">upcast</span><span class="special">&lt;</span><span class="identifier">PyObject</span><span class="special">*&gt;(</span><span class="identifier">p</span><span class="special">));</span>
153<span class="identifier">m_p</span> <span class="special">=</span> <span class="identifier">upcast</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">*&gt;(</span><span class="identifier">p</span><span class="special">);</span>
154</pre></dd>
155</dl>
156</div>
157<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Y</span><span class="special">&gt;</span>
158<span class="keyword">explicit</span> <span class="identifier">handle</span><span class="special">(</span><span class="identifier">null_ok</span><span class="special">&lt;</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">borrowed</span><span class="special">&lt;</span><span class="identifier">Y</span><span class="special">&gt;</span> <span class="special">&gt;*</span> <span class="identifier">p</span><span class="special">);</span></pre>
159<div class="variablelist">
160<p class="title"><b></b></p>
161<dl class="variablelist">
162<dt><span class="term">Effects</span></dt>
163<dd><pre class="programlisting"><span class="identifier">Py_XINCREF</span><span class="special">(</span><span class="identifier">upcast</span><span class="special">&lt;</span><span class="identifier">PyObject</span><span class="special">*&gt;(</span><span class="identifier">p</span><span class="special">));</span>
164      <span class="identifier">m_p</span> <span class="special">=</span> <span class="identifier">upcast</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">*&gt;(</span><span class="identifier">p</span><span class="special">);</span>
165</pre></dd>
166</dl>
167</div>
168<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Y</span><span class="special">&gt;</span>
169<span class="keyword">explicit</span> <span class="identifier">handle</span><span class="special">(</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">borrowed</span><span class="special">&lt;</span><span class="identifier">Y</span><span class="special">&gt;*</span> <span class="identifier">p</span><span class="special">);</span></pre>
170<div class="variablelist">
171<p class="title"><b></b></p>
172<dl class="variablelist">
173<dt><span class="term">Effects</span></dt>
174<dd><pre class="programlisting"><span class="identifier">Py_XINCREF</span><span class="special">(</span><span class="identifier">upcast</span><span class="special">&lt;</span><span class="identifier">PyObject</span><span class="special">*&gt;(</span><span class="identifier">p</span><span class="special">));</span>
175      <span class="identifier">m_p</span> <span class="special">=</span> <span class="identifier">upcast</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">*&gt;(</span><span class="identifier">expect_non_null</span><span class="special">(</span><span class="identifier">p</span><span class="special">));</span>
176</pre></dd>
177</dl>
178</div>
179<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Y</span><span class="special">&gt;</span>
180<span class="keyword">explicit</span> <span class="identifier">handle</span><span class="special">(</span><span class="identifier">null_ok</span><span class="special">&lt;</span><span class="identifier">Y</span><span class="special">&gt;*</span> <span class="identifier">p</span><span class="special">);</span>
181</pre>
182<div class="variablelist">
183<p class="title"><b></b></p>
184<dl class="variablelist">
185<dt><span class="term">Effects</span></dt>
186<dd><p>
187                  <code class="computeroutput"><span class="identifier">m_p</span> <span class="special">=</span>
188                  <span class="identifier">upcast</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">*&gt;(</span><span class="identifier">p</span><span class="special">);</span></code>
189                </p></dd>
190</dl>
191</div>
192<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Y</span><span class="special">&gt;</span>
193<span class="keyword">explicit</span> <span class="identifier">handle</span><span class="special">(</span><span class="identifier">Y</span><span class="special">*</span> <span class="identifier">p</span><span class="special">);</span>
194</pre>
195<div class="variablelist">
196<p class="title"><b></b></p>
197<dl class="variablelist">
198<dt><span class="term">Effects</span></dt>
199<dd><p>
200                  <code class="computeroutput"><span class="identifier">m_p</span> <span class="special">=</span>
201                  <span class="identifier">upcast</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">*&gt;(</span><span class="identifier">expect_non_null</span><span class="special">(</span><span class="identifier">p</span><span class="special">));</span></code>
202                </p></dd>
203</dl>
204</div>
205<pre class="programlisting"><span class="identifier">handle</span><span class="special">();</span>
206</pre>
207<div class="variablelist">
208<p class="title"><b></b></p>
209<dl class="variablelist">
210<dt><span class="term">Effects</span></dt>
211<dd><p>
212                  <code class="computeroutput"><span class="identifier">m_p</span> <span class="special">=</span>
213                  <span class="number">0</span><span class="special">;</span></code>
214                </p></dd>
215</dl>
216</div>
217<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Y</span><span class="special">&gt;</span>
218<span class="identifier">handle</span><span class="special">(</span><span class="identifier">handle</span><span class="special">&lt;</span><span class="identifier">Y</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">r</span><span class="special">);</span>
219<span class="identifier">handle</span><span class="special">(</span><span class="identifier">handle</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">r</span><span class="special">);</span>
220</pre>
221<div class="variablelist">
222<p class="title"><b></b></p>
223<dl class="variablelist">
224<dt><span class="term">Effects</span></dt>
225<dd><p>
226                  m_p = r.m_p; Py_XINCREF(upcast&lt;PyObject*&gt;(m_p));
227                </p></dd>
228</dl>
229</div>
230</div>
231<div class="section">
232<div class="titlepage"><div><div><h4 class="title">
233<a name="utility_and_infrastructure.boost_python_handle_hpp.class_template_handle.class_template_handle_modifiers"></a><a class="link" href="boost_python_handle_hpp.html#utility_and_infrastructure.boost_python_handle_hpp.class_template_handle.class_template_handle_modifiers" title="Class template handle modifiers">Class
234          template <code class="computeroutput"><span class="identifier">handle</span></code> modifiers</a>
235</h4></div></div></div>
236<pre class="programlisting"><span class="identifier">handle</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">handle</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">r</span><span class="special">);</span>
237<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Y</span><span class="special">&gt;</span>
238<span class="identifier">handle</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">handle</span><span class="special">&lt;</span><span class="identifier">Y</span><span class="special">&gt;</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">r</span><span class="special">);</span> <span class="comment">// never throws</span>
239</pre>
240<div class="variablelist">
241<p class="title"><b></b></p>
242<dl class="variablelist">
243<dt><span class="term">Effects</span></dt>
244<dd><p>
245                  <code class="computeroutput"><span class="identifier">Py_XINCREF</span><span class="special">(</span><span class="identifier">upcast</span><span class="special">&lt;</span><span class="identifier">PyObject</span><span class="special">*&gt;(</span><span class="identifier">r</span><span class="special">.</span><span class="identifier">m_p</span><span class="special">));</span>
246                  <span class="identifier">Py_XDECREF</span><span class="special">(</span>
247                  <span class="identifier">upcast</span><span class="special">&lt;</span><span class="identifier">PyObject</span><span class="special">*&gt;(</span><span class="identifier">m_p</span><span class="special">));</span>
248                  <span class="identifier">m_p</span> <span class="special">=</span>
249                  <span class="identifier">r</span><span class="special">.</span><span class="identifier">m_p</span><span class="special">;</span></code>
250                </p></dd>
251</dl>
252</div>
253<pre class="programlisting"><span class="identifier">T</span><span class="special">*</span> <span class="identifier">release</span><span class="special">();</span>
254</pre>
255<div class="variablelist">
256<p class="title"><b></b></p>
257<dl class="variablelist">
258<dt><span class="term">Effects</span></dt>
259<dd><p>
260                  <code class="computeroutput"><span class="identifier">T</span><span class="special">*</span>
261                  <span class="identifier">x</span> <span class="special">=</span>
262                  <span class="identifier">m_p</span><span class="special">;</span>
263                  <span class="identifier">m_p</span> <span class="special">=</span>
264                  <span class="number">0</span><span class="special">;</span>
265                  <span class="keyword">return</span> <span class="identifier">x</span><span class="special">;</span></code>
266                </p></dd>
267</dl>
268</div>
269<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">reset</span><span class="special">();</span>
270</pre>
271<div class="variablelist">
272<p class="title"><b></b></p>
273<dl class="variablelist">
274<dt><span class="term">Effects</span></dt>
275<dd><p>
276                  <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span>
277                  <span class="special">=</span> <span class="identifier">handle</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;();</span></code>
278                </p></dd>
279</dl>
280</div>
281</div>
282<div class="section">
283<div class="titlepage"><div><div><h4 class="title">
284<a name="utility_and_infrastructure.boost_python_handle_hpp.class_template_handle.class_template_handle_observers"></a><a class="link" href="boost_python_handle_hpp.html#utility_and_infrastructure.boost_python_handle_hpp.class_template_handle.class_template_handle_observers" title="Class template handle observers">Class
285          template <code class="computeroutput"><span class="identifier">handle</span></code> observers</a>
286</h4></div></div></div>
287<pre class="programlisting"><span class="identifier">T</span><span class="special">*</span> <span class="keyword">operator</span><span class="special">-&gt;</span> <span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
288<span class="identifier">T</span><span class="special">*</span> <span class="identifier">get</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
289</pre>
290<div class="variablelist">
291<p class="title"><b></b></p>
292<dl class="variablelist">
293<dt><span class="term">Returns</span></dt>
294<dd><p>
295                  <code class="computeroutput"><span class="identifier">m_p</span><span class="special">;</span></code>
296                </p></dd>
297</dl>
298</div>
299<pre class="programlisting"><span class="identifier">T</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">*</span> <span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
300</pre>
301<div class="variablelist">
302<p class="title"><b></b></p>
303<dl class="variablelist">
304<dt><span class="term">Returns</span></dt>
305<dd><p>
306                  <code class="computeroutput"><span class="special">*</span><span class="identifier">m_p</span><span class="special">;</span></code>
307                </p></dd>
308</dl>
309</div>
310<pre class="programlisting"><span class="keyword">operator</span> <span class="identifier">bool_type</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> <span class="comment">// never throws</span>
311</pre>
312<div class="variablelist">
313<p class="title"><b></b></p>
314<dl class="variablelist">
315<dt><span class="term">Returns</span></dt>
316<dd><p>
317                  <code class="computeroutput"><span class="number">0</span></code> if <code class="computeroutput"><span class="identifier">m_p</span> <span class="special">==</span>
318                  <span class="number">0</span></code>, a pointer convertible
319                  to true otherwise.
320                </p></dd>
321</dl>
322</div>
323</div>
324</div>
325<div class="section">
326<div class="titlepage"><div><div><h3 class="title">
327<a name="utility_and_infrastructure.boost_python_handle_hpp.function_borrowed"></a><a class="link" href="boost_python_handle_hpp.html#utility_and_infrastructure.boost_python_handle_hpp.function_borrowed" title="Function borrowed">Function
328        <code class="computeroutput"><span class="identifier">borrowed</span></code></a>
329</h3></div></div></div>
330<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
331<span class="identifier">detail</span><span class="special">::</span><span class="identifier">borrowed</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;*</span> <span class="identifier">borrowed</span><span class="special">(</span><span class="identifier">T</span><span class="special">*</span> <span class="identifier">p</span><span class="special">)</span>
332<span class="special">{</span>
333    <span class="keyword">return</span> <span class="special">(</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">borrowed</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;*)</span><span class="identifier">p</span><span class="special">;</span>
334<span class="special">}</span>
335</pre>
336</div>
337<div class="section">
338<div class="titlepage"><div><div><h3 class="title">
339<a name="utility_and_infrastructure.boost_python_handle_hpp.function_allow_null"></a><a class="link" href="boost_python_handle_hpp.html#utility_and_infrastructure.boost_python_handle_hpp.function_allow_null" title="Function allow_null">Function
340        <code class="computeroutput"><span class="identifier">allow_null</span></code></a>
341</h3></div></div></div>
342<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
343<span class="identifier">null_ok</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;*</span> <span class="identifier">allow_null</span><span class="special">(</span><span class="identifier">T</span><span class="special">*</span> <span class="identifier">p</span><span class="special">)</span>
344<span class="special">{</span>
345    <span class="keyword">return</span> <span class="special">(</span><span class="identifier">null_ok</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;*)</span><span class="identifier">p</span><span class="special">;</span>
346<span class="special">}</span>
347</pre>
348</div>
349</div>
350<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
351<td align="left"></td>
352<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2015 David Abrahams, Stefan Seefeld<p>
353        Distributed under the Boost Software License, Version 1.0. (See accompanying
354        file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>
355      </p>
356</div></td>
357</tr></table>
358<hr>
359<div class="spirit-nav">
360<a accesskey="p" href="boost_python_pointee_hpp.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../utility_and_infrastructure.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="boost_python_type_id_hpp.html"><img src="../../images/next.png" alt="Next"></a>
361</div>
362</body>
363</html>
364