• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4<title>Chapter 2. High Level Components</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="index.html" title="Boost.Python Reference Manual">
9<link rel="prev" href="concepts/objectwrapper.html" title="ObjectWrapper">
10<link rel="next" href="high_level_components/boost_python_def_hpp.html" title="boost/python/def.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="concepts/objectwrapper.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="index.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="high_level_components/boost_python_def_hpp.html"><img src="../images/next.png" alt="Next"></a>
17</div>
18<div class="chapter">
19<div class="titlepage"><div><div><h1 class="title">
20<a name="high_level_components"></a>Chapter 2. High Level Components</h1></div></div></div>
21<div class="toc">
22<p><b>Table of Contents</b></p>
23<dl class="toc">
24<dt><span class="section"><a href="high_level_components.html#high_level_components.boost_python_class_hpp">boost/python/class.hpp</a></span></dt>
25<dd><dl>
26<dt><span class="section"><a href="high_level_components.html#high_level_components.boost_python_class_hpp.introduction">Introduction</a></span></dt>
27<dt><span class="section"><a href="high_level_components.html#high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel">Class
28        template <code class="computeroutput"><span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">Bases</span><span class="special">,</span> <span class="identifier">HeldType</span><span class="special">,</span> <span class="identifier">NonCopyable</span><span class="special">&gt;</span></code></a></span></dt>
29<dt><span class="section"><a href="high_level_components.html#high_level_components.boost_python_class_hpp.class_template_bases_t1_t2_tn">Class
30        template bases&lt;T1, T2, ...TN&gt;</a></span></dt>
31<dt><span class="section"><a href="high_level_components.html#high_level_components.boost_python_class_hpp.examples">Examples</a></span></dt>
32</dl></dd>
33<dt><span class="section"><a href="high_level_components/boost_python_def_hpp.html">boost/python/def.hpp</a></span></dt>
34<dd><dl>
35<dt><span class="section"><a href="high_level_components/boost_python_def_hpp.html#high_level_components.boost_python_def_hpp.introduction">Introduction</a></span></dt>
36<dt><span class="section"><a href="high_level_components/boost_python_def_hpp.html#high_level_components.boost_python_def_hpp.functions">Functions</a></span></dt>
37<dt><span class="section"><a href="high_level_components/boost_python_def_hpp.html#high_level_components.boost_python_def_hpp.example">Example</a></span></dt>
38</dl></dd>
39<dt><span class="section"><a href="high_level_components/boost_python_def_visitor_hpp.html">boost/python/def_visitor.hpp</a></span></dt>
40<dd><dl>
41<dt><span class="section"><a href="high_level_components/boost_python_def_visitor_hpp.html#high_level_components.boost_python_def_visitor_hpp.introduction">Introduction</a></span></dt>
42<dt><span class="section"><a href="high_level_components/boost_python_def_visitor_hpp.html#high_level_components.boost_python_def_visitor_hpp.class_def_visitor">Class
43        <code class="computeroutput"><span class="identifier">def_visitor</span></code></a></span></dt>
44<dt><span class="section"><a href="high_level_components/boost_python_def_visitor_hpp.html#high_level_components.boost_python_def_visitor_hpp.example">Example</a></span></dt>
45</dl></dd>
46<dt><span class="section"><a href="high_level_components/boost_python_docstring_options_h.html">boost/python/docstring_options.hpp</a></span></dt>
47<dd><dl>
48<dt><span class="section"><a href="high_level_components/boost_python_docstring_options_h.html#high_level_components.boost_python_docstring_options_h.introduction">Introduction</a></span></dt>
49<dt><span class="section"><a href="high_level_components/boost_python_docstring_options_h.html#high_level_components.boost_python_docstring_options_h.class_docstring_options">Class
50        <code class="computeroutput"><span class="identifier">docstring_options</span></code></a></span></dt>
51<dt><span class="section"><a href="high_level_components/boost_python_docstring_options_h.html#high_level_components.boost_python_docstring_options_h.class_dostring_options_construct">Class
52        dostring_options constructors</a></span></dt>
53<dt><span class="section"><a href="high_level_components/boost_python_docstring_options_h.html#high_level_components.boost_python_docstring_options_h.class_docstring_options_destruct">Class
54        docstring_options destructor</a></span></dt>
55<dt><span class="section"><a href="high_level_components/boost_python_docstring_options_h.html#high_level_components.boost_python_docstring_options_h.class_docstring_options_modifier">Class
56        <code class="computeroutput"><span class="identifier">docstring_options</span></code> modifier
57        functions</a></span></dt>
58<dt><span class="section"><a href="high_level_components/boost_python_docstring_options_h.html#high_level_components.boost_python_docstring_options_h.example">Example</a></span></dt>
59</dl></dd>
60<dt><span class="section"><a href="high_level_components/boost_python_enum_hpp.html">boost/python/enum.hpp</a></span></dt>
61<dd><dl>
62<dt><span class="section"><a href="high_level_components/boost_python_enum_hpp.html#high_level_components.boost_python_enum_hpp.introduction">Introduction</a></span></dt>
63<dt><span class="section"><a href="high_level_components/boost_python_enum_hpp.html#high_level_components.boost_python_enum_hpp.class_template_enum">Class
64        template <code class="computeroutput"><span class="identifier">enum_</span></code></a></span></dt>
65<dt><span class="section"><a href="high_level_components/boost_python_enum_hpp.html#high_level_components.boost_python_enum_hpp.class_template_enum_constructors">Class
66        template <code class="computeroutput"><span class="identifier">enum_</span></code> constructors</a></span></dt>
67<dt><span class="section"><a href="high_level_components/boost_python_enum_hpp.html#high_level_components.boost_python_enum_hpp.class_template_enum_modifier_fun">Class
68        template <code class="computeroutput"><span class="identifier">enum_</span></code> modifier functions</a></span></dt>
69<dt><span class="section"><a href="high_level_components/boost_python_enum_hpp.html#high_level_components.boost_python_enum_hpp.example">Example</a></span></dt>
70</dl></dd>
71<dt><span class="section"><a href="high_level_components/boost_python_errors_hpp.html">boost/python/errors.hpp</a></span></dt>
72<dd><dl>
73<dt><span class="section"><a href="high_level_components/boost_python_errors_hpp.html#high_level_components.boost_python_errors_hpp.introduction">Introduction</a></span></dt>
74<dt><span class="section"><a href="high_level_components/boost_python_errors_hpp.html#high_level_components.boost_python_errors_hpp.class_error_already_set">Class
75        <code class="computeroutput"><span class="identifier">error_already_set</span></code></a></span></dt>
76<dt><span class="section"><a href="high_level_components/boost_python_errors_hpp.html#high_level_components.boost_python_errors_hpp.functions">Functions</a></span></dt>
77<dt><span class="section"><a href="high_level_components/boost_python_errors_hpp.html#high_level_components.boost_python_errors_hpp.example">Example</a></span></dt>
78</dl></dd>
79<dt><span class="section"><a href="high_level_components/boost_python_exception_translato.html">boost/python/exception_translator.hpp</a></span></dt>
80<dd><dl>
81<dt><span class="section"><a href="high_level_components/boost_python_exception_translato.html#high_level_components.boost_python_exception_translato.introduction">Introduction</a></span></dt>
82<dt><span class="section"><a href="high_level_components/boost_python_exception_translato.html#high_level_components.boost_python_exception_translato.function_register_exception_tran">Function
83        <code class="computeroutput"><span class="identifier">register_exception_translator</span></code></a></span></dt>
84<dt><span class="section"><a href="high_level_components/boost_python_exception_translato.html#high_level_components.boost_python_exception_translato.example">Example</a></span></dt>
85</dl></dd>
86<dt><span class="section"><a href="high_level_components/boost_python_init_hpp.html">boost/python/init.hpp</a></span></dt>
87<dd><dl>
88<dt><span class="section"><a href="high_level_components/boost_python_init_hpp.html#high_level_components.boost_python_init_hpp.introduction">Introduction</a></span></dt>
89<dt><span class="section"><a href="high_level_components/boost_python_init_hpp.html#high_level_components.boost_python_init_hpp.class_template_init">Class
90        template <code class="computeroutput"><span class="identifier">init</span></code></a></span></dt>
91<dt><span class="section"><a href="high_level_components/boost_python_init_hpp.html#high_level_components.boost_python_init_hpp.class_template_optional">Class
92        template <code class="computeroutput"><span class="identifier">optional</span></code> </a></span></dt>
93<dt><span class="section"><a href="high_level_components/boost_python_init_hpp.html#high_level_components.boost_python_init_hpp.example">Example</a></span></dt>
94</dl></dd>
95<dt><span class="section"><a href="high_level_components/boost_python_iterator_hpp.html">boost/python/iterator.hpp</a></span></dt>
96<dd><dl>
97<dt><span class="section"><a href="high_level_components/boost_python_iterator_hpp.html#high_level_components.boost_python_iterator_hpp.introduction">Introduction</a></span></dt>
98<dt><span class="section"><a href="high_level_components/boost_python_iterator_hpp.html#high_level_components.boost_python_iterator_hpp.class_template_iterator">Class
99        template <code class="computeroutput"><span class="identifier">iterator</span></code></a></span></dt>
100<dt><span class="section"><a href="high_level_components/boost_python_iterator_hpp.html#high_level_components.boost_python_iterator_hpp.class_template_iterator_construc">Class
101        template iterator constructors</a></span></dt>
102<dt><span class="section"><a href="high_level_components/boost_python_iterator_hpp.html#high_level_components.boost_python_iterator_hpp.class_template_iterators">Class
103        template <code class="computeroutput"><span class="identifier">iterators</span></code></a></span></dt>
104<dt><span class="section"><a href="high_level_components/boost_python_iterator_hpp.html#high_level_components.boost_python_iterator_hpp.class_template_iterators_nested_">Class
105        template iterators nested types</a></span></dt>
106<dt><span class="section"><a href="high_level_components/boost_python_iterator_hpp.html#high_level_components.boost_python_iterator_hpp.class_template_iterators_static_">Class
107        template iterators static functions</a></span></dt>
108<dt><span class="section"><a href="high_level_components/boost_python_iterator_hpp.html#high_level_components.boost_python_iterator_hpp.functions">Functions</a></span></dt>
109<dt><span class="section"><a href="high_level_components/boost_python_iterator_hpp.html#high_level_components.boost_python_iterator_hpp.example">Example</a></span></dt>
110</dl></dd>
111<dt><span class="section"><a href="high_level_components/boost_python_module_hpp.html">boost/python/module.hpp</a></span></dt>
112<dd><dl>
113<dt><span class="section"><a href="high_level_components/boost_python_module_hpp.html#high_level_components.boost_python_module_hpp.introduction">Introduction</a></span></dt>
114<dt><span class="section"><a href="high_level_components/boost_python_module_hpp.html#high_level_components.boost_python_module_hpp.macros">Macros</a></span></dt>
115<dt><span class="section"><a href="high_level_components/boost_python_module_hpp.html#high_level_components.boost_python_module_hpp.examples">Examples</a></span></dt>
116</dl></dd>
117<dt><span class="section"><a href="high_level_components/boost_python_operators_hpp.html">boost/python/operators.hpp</a></span></dt>
118<dd><dl>
119<dt><span class="section"><a href="high_level_components/boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.introduction">Introduction</a></span></dt>
120<dt><span class="section"><a href="high_level_components/boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.class_self_ns_self_t">Class
121        <code class="computeroutput"><span class="identifier">self_ns</span><span class="special">::</span><span class="identifier">self_t</span></code></a></span></dt>
122<dt><span class="section"><a href="high_level_components/boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.class_template_other">Class
123        template <code class="computeroutput"><span class="identifier">other</span></code></a></span></dt>
124<dt><span class="section"><a href="high_level_components/boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.class_template_detail_operator">Class
125        template <code class="computeroutput"><span class="identifier">detail</span><span class="special">::</span><span class="identifier">operator_</span></code></a></span></dt>
126<dt><span class="section"><a href="high_level_components/boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.object_self">Object
127        <code class="computeroutput"><span class="identifier">self</span></code></a></span></dt>
128<dt><span class="section"><a href="high_level_components/boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.example">Example</a></span></dt>
129</dl></dd>
130<dt><span class="section"><a href="high_level_components/boost_python_scope_hpp.html">boost/python/scope.hpp</a></span></dt>
131<dd><dl>
132<dt><span class="section"><a href="high_level_components/boost_python_scope_hpp.html#high_level_components.boost_python_scope_hpp.introduction">Introduction</a></span></dt>
133<dt><span class="section"><a href="high_level_components/boost_python_scope_hpp.html#high_level_components.boost_python_scope_hpp.class_scope">Class
134        <code class="computeroutput"><span class="identifier">scope</span></code></a></span></dt>
135<dt><span class="section"><a href="high_level_components/boost_python_scope_hpp.html#high_level_components.boost_python_scope_hpp.class_scope_constructors_and_des">Class
136        scope constructors and destructor</a></span></dt>
137<dt><span class="section"><a href="high_level_components/boost_python_scope_hpp.html#high_level_components.boost_python_scope_hpp.example">Example</a></span></dt>
138</dl></dd>
139<dt><span class="section"><a href="high_level_components/boost_python_stl_iterator_hpp.html">boost/python/stl_iterator.hpp</a></span></dt>
140<dd><dl>
141<dt><span class="section"><a href="high_level_components/boost_python_stl_iterator_hpp.html#high_level_components.boost_python_stl_iterator_hpp.introduction">Introduction</a></span></dt>
142<dt><span class="section"><a href="high_level_components/boost_python_stl_iterator_hpp.html#high_level_components.boost_python_stl_iterator_hpp.class_template_stl_input_iterato">Class
143        template <code class="computeroutput"><span class="identifier">stl_input_iterator</span></code></a></span></dt>
144<dt><span class="section"><a href="high_level_components/boost_python_stl_iterator_hpp.html#high_level_components.boost_python_stl_iterator_hpp.class_template_stl_input_iterat0">Class
145        template <code class="computeroutput"><span class="identifier">stl_input_iterator</span></code>
146        constructors</a></span></dt>
147<dt><span class="section"><a href="high_level_components/boost_python_stl_iterator_hpp.html#high_level_components.boost_python_stl_iterator_hpp.class_template_stl_input_iterat1">Class
148        template <code class="computeroutput"><span class="identifier">stl_input_iterator</span></code>
149        modifiers</a></span></dt>
150<dt><span class="section"><a href="high_level_components/boost_python_stl_iterator_hpp.html#high_level_components.boost_python_stl_iterator_hpp.class_template_stl_input_iterat2">Class
151        template <code class="computeroutput"><span class="identifier">stl_input_iterator</span></code>
152        observers</a></span></dt>
153<dt><span class="section"><a href="high_level_components/boost_python_stl_iterator_hpp.html#high_level_components.boost_python_stl_iterator_hpp.example">Example</a></span></dt>
154</dl></dd>
155<dt><span class="section"><a href="high_level_components/boost_python_wrapper_hpp.html">boost/python/wrapper.hpp</a></span></dt>
156<dd><dl>
157<dt><span class="section"><a href="high_level_components/boost_python_wrapper_hpp.html#high_level_components.boost_python_wrapper_hpp.introduction">Introduction</a></span></dt>
158<dt><span class="section"><a href="high_level_components/boost_python_wrapper_hpp.html#high_level_components.boost_python_wrapper_hpp.class_override">Class
159        <code class="computeroutput"><span class="identifier">override</span></code></a></span></dt>
160<dt><span class="section"><a href="high_level_components/boost_python_wrapper_hpp.html#high_level_components.boost_python_wrapper_hpp.class_override_observer_function">Class
161        <code class="computeroutput"><span class="identifier">override</span></code> observer functions</a></span></dt>
162<dt><span class="section"><a href="high_level_components/boost_python_wrapper_hpp.html#high_level_components.boost_python_wrapper_hpp.class_template_wrapper">Class
163        template <code class="computeroutput"><span class="identifier">wrapper</span></code></a></span></dt>
164<dt><span class="section"><a href="high_level_components/boost_python_wrapper_hpp.html#high_level_components.boost_python_wrapper_hpp.class_template_wrapper_observer_">Class
165        template <code class="computeroutput"><span class="identifier">wrapper</span></code> observer
166        functions</a></span></dt>
167<dt><span class="section"><a href="high_level_components/boost_python_wrapper_hpp.html#high_level_components.boost_python_wrapper_hpp.example">Example</a></span></dt>
168</dl></dd>
169</dl>
170</div>
171<div class="section">
172<div class="titlepage"><div><div><h2 class="title" style="clear: both">
173<a name="high_level_components.boost_python_class_hpp"></a><a class="link" href="high_level_components.html#high_level_components.boost_python_class_hpp" title="boost/python/class.hpp">boost/python/class.hpp</a>
174</h2></div></div></div>
175<div class="toc"><dl class="toc">
176<dt><span class="section"><a href="high_level_components.html#high_level_components.boost_python_class_hpp.introduction">Introduction</a></span></dt>
177<dt><span class="section"><a href="high_level_components.html#high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel">Class
178        template <code class="computeroutput"><span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">Bases</span><span class="special">,</span> <span class="identifier">HeldType</span><span class="special">,</span> <span class="identifier">NonCopyable</span><span class="special">&gt;</span></code></a></span></dt>
179<dt><span class="section"><a href="high_level_components.html#high_level_components.boost_python_class_hpp.class_template_bases_t1_t2_tn">Class
180        template bases&lt;T1, T2, ...TN&gt;</a></span></dt>
181<dt><span class="section"><a href="high_level_components.html#high_level_components.boost_python_class_hpp.examples">Examples</a></span></dt>
182</dl></div>
183<div class="section">
184<div class="titlepage"><div><div><h3 class="title">
185<a name="high_level_components.boost_python_class_hpp.introduction"></a><a class="link" href="high_level_components.html#high_level_components.boost_python_class_hpp.introduction" title="Introduction">Introduction</a>
186</h3></div></div></div>
187<p>
188          <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">python</span><span class="special">/</span><span class="keyword">class</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
189          defines the interface through which users expose their C++ classes to Python.
190          It declares the <code class="computeroutput"><span class="identifier">class_</span></code>
191          class template, which is parameterized on the class type being exposed.
192          It also exposes the <code class="computeroutput"><span class="identifier">init</span></code>,
193          <code class="computeroutput"><span class="identifier">optional</span></code> and <code class="computeroutput"><span class="identifier">bases</span></code> utility class templates, which
194          are used in conjunction with <code class="computeroutput"><span class="identifier">class_</span></code>.
195        </p>
196<p>
197          <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">python</span><span class="special">/</span><span class="identifier">class_fwd</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code> contains a forward declaration of the
198          <code class="computeroutput"><span class="identifier">class_</span></code> class template.
199        </p>
200</div>
201<div class="section">
202<div class="titlepage"><div><div><h3 class="title">
203<a name="high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel"></a><a class="link" href="high_level_components.html#high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel" title="Class template class_&lt;T, Bases, HeldType, NonCopyable&gt;">Class
204        template <code class="computeroutput"><span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">Bases</span><span class="special">,</span> <span class="identifier">HeldType</span><span class="special">,</span> <span class="identifier">NonCopyable</span><span class="special">&gt;</span></code></a>
205</h3></div></div></div>
206<div class="toc"><dl class="toc">
207<dt><span class="section"><a href="high_level_components.html#high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel.heldtype_semantics">HeldType
208          Semantics</a></span></dt>
209<dt><span class="section"><a href="high_level_components.html#high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel.class_template_class_synopsis">Class
210          template <code class="computeroutput"><span class="identifier">class_</span></code> synopsis</a></span></dt>
211<dt><span class="section"><a href="high_level_components.html#high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel.class_template_class_constructor">Class
212          template <code class="computeroutput"><span class="identifier">class_</span></code> constructors</a></span></dt>
213<dt><span class="section"><a href="high_level_components.html#high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel.class_template_class_modifier_fu">Class
214          template <code class="computeroutput"><span class="identifier">class_</span></code> modifier
215          functions</a></span></dt>
216</dl></div>
217<p>
218          Creates a Python class associated with the C++ type passed as its first
219          parameter. Although it has four template parameters, only the first one
220          is required. The three optional arguments can actually be supplied <span class="bold"><strong>in any order</strong></span>; Boost.Python determines the role of
221          the argument from its type.
222        </p>
223<div class="informaltable"><table class="table">
224<colgroup>
225<col>
226<col>
227<col>
228<col>
229</colgroup>
230<thead><tr>
231<th>
232                  <p>
233                    Template Parameter
234                  </p>
235                </th>
236<th>
237                  <p>
238                    Requirements
239                  </p>
240                </th>
241<th>
242                  <p>
243                    Semantics
244                  </p>
245                </th>
246<th>
247                  <p>
248                    Default
249                  </p>
250                </th>
251</tr></thead>
252<tbody>
253<tr>
254<td>
255                  <p>
256                    <code class="computeroutput"><span class="identifier">T</span></code>
257                  </p>
258                </td>
259<td>
260                  <p>
261                    A class type.
262                  </p>
263                </td>
264<td>
265                  <p>
266                    The class being wrapped
267                  </p>
268                </td>
269<td>
270                </td>
271</tr>
272<tr>
273<td>
274                  <p>
275                    Bases
276                  </p>
277                </td>
278<td>
279                  <p>
280                    A specialization of <a class="link" href="high_level_components.html#high_level_components.boost_python_class_hpp.class_template_bases_t1_t2_tn" title="Class template bases&lt;T1, T2, ...TN&gt;">bases&lt;...&gt;</a>
281                    which specifies previously-exposed C++ base classes of <code class="computeroutput"><span class="identifier">T</span></code>.
282                  </p>
283                </td>
284<td>
285                  <p>
286                    Registers <code class="computeroutput"><span class="identifier">from_python</span></code>
287                    conversions from wrapped <code class="computeroutput"><span class="identifier">T</span></code>
288                    instances to each of its exposed direct and indirect bases. For
289                    each polymorphic base <code class="computeroutput"><span class="identifier">B</span></code>,
290                    registers conversions from indirectly-held wrapped <code class="computeroutput"><span class="identifier">B</span></code> instances to <code class="computeroutput"><span class="identifier">T</span></code>.
291                  </p>
292                </td>
293<td>
294                  <p>
295                    <a class="link" href="high_level_components.html#high_level_components.boost_python_class_hpp.class_template_bases_t1_t2_tn" title="Class template bases&lt;T1, T2, ...TN&gt;">bases&lt;&gt;</a>
296                  </p>
297                </td>
298</tr>
299<tr>
300<td>
301                  <p>
302                    HeldType
303                  </p>
304                </td>
305<td>
306                  <p>
307                    Must be <code class="computeroutput"><span class="identifier">T</span></code>, a
308                    class derived from <code class="computeroutput"><span class="identifier">T</span></code>,
309                    or a <a class="link" href="concepts/dereferenceable.html#concepts.dereferenceable.concept_requirements" title="Concept Requirements">Dereferenceable</a>
310                    type for which <code class="computeroutput"><span class="identifier">pointee</span><span class="special">&lt;</span><span class="identifier">HeldType</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
311                    is <code class="computeroutput"><span class="identifier">T</span></code> or a class
312                    derived from <code class="computeroutput"><span class="identifier">T</span></code>.
313                  </p>
314                </td>
315<td>
316                  <p>
317                    Specifies the type that is actually embedded in a Python object
318                    wrapping a <code class="computeroutput"><span class="identifier">T</span></code>
319                    instance when <code class="computeroutput"><span class="identifier">T</span></code>'s
320                    constructor is called or when a <code class="computeroutput"><span class="identifier">T</span></code>
321                    or <code class="computeroutput"><span class="identifier">T</span><span class="special">*</span></code>
322                    is converted to Python without the use of <a class="link" href="function_invocation_and_creation/boost_python_ptr_hpp.html#function_invocation_and_creation.boost_python_ptr_hpp.functions" title="Functions">ptr</a>,
323                    <code class="computeroutput"><span class="identifier">ref</span></code>, or <a class="link" href="concepts.html#concepts.callpolicies" title="CallPolicies">Call Policies</a> such as
324                    <a class="link" href="function_invocation_and_creation/models_of_callpolicies.html#function_invocation_and_creation.models_of_callpolicies.boost_python_return_internal_ref.class_template_return_internal_r" title="Class template return_internal_reference">return_internal_reference</a>.
325                    More details below.
326                  </p>
327                </td>
328<td>
329                  <p>
330                    <code class="computeroutput"><span class="identifier">T</span></code>
331                  </p>
332                </td>
333</tr>
334<tr>
335<td>
336                  <p>
337                    NonCopyable
338                  </p>
339                </td>
340<td>
341                  <p>
342                    If supplied, must be <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">noncopyable</span></code>.
343                  </p>
344                </td>
345<td>
346                  <p>
347                    Suppresses automatic registration of <code class="computeroutput"><span class="identifier">to_python</span></code>
348                    conversions which copy <code class="computeroutput"><span class="identifier">T</span></code>
349                    instances. Required when <code class="computeroutput"><span class="identifier">T</span></code>
350                    has no publicly-accessible copy constructor.
351                  </p>
352                </td>
353<td>
354                  <p>
355                    An unspecified type other than boost::noncopyable.
356                  </p>
357                </td>
358</tr>
359</tbody>
360</table></div>
361<div class="section">
362<div class="titlepage"><div><div><h4 class="title">
363<a name="high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel.heldtype_semantics"></a><a class="link" href="high_level_components.html#high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel.heldtype_semantics" title="HeldType Semantics">HeldType
364          Semantics</a>
365</h4></div></div></div>
366<div class="orderedlist"><ol class="orderedlist" type="1">
367<li class="listitem">
368                If HeldType is derived from <code class="computeroutput"><span class="identifier">T</span></code>,
369                its exposed constructor(s) must accept an initial <code class="computeroutput"><span class="identifier">PyObject</span><span class="special">*</span></code> argument which refers back to the
370                Python object that contains the HeldType instance, as shown in this
371                example. This argument is not included in the <a class="link" href="high_level_components/boost_python_init_hpp.html#high_level_components.boost_python_init_hpp.introduction.init_expressions" title="init-expressions">init-expression</a>
372                passed to <a class="link" href="high_level_components.html#high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel.class_template_class_modifier_fu" title="Class template class_ modifier functions">def(init_expr)</a>,
373                below, nor is it passed explicitly by users when Python instances
374                of <code class="computeroutput"><span class="identifier">T</span></code> are created.
375                This idiom allows C++ virtual functions which will be overridden
376                in Python to access the Python object so the Python method can be
377                invoked. Boost.Python automatically registers additional converters
378                which allow wrapped instances of <code class="computeroutput"><span class="identifier">T</span></code>
379                to be passed to wrapped C++ functions expecting HeldType arguments.
380              </li>
381<li class="listitem">
382                Because Boost.Python will always allow wrapped instances of <code class="computeroutput"><span class="identifier">T</span></code> to be passed in place of HeldType
383                arguments, specifying a smart pointer for HeldType allows users to
384                pass Python <code class="computeroutput"><span class="identifier">T</span></code> instances
385                where a smart pointer-to-T is expected. Smart pointers such as <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">auto_ptr</span><span class="special">&lt;&gt;</span></code>
386                or <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">shared_ptr</span><span class="special">&lt;&gt;</span></code>
387                which contain a nested type <code class="computeroutput"><span class="identifier">element_type</span></code>
388                designating the referent type are automatically supported; additional
389                smart pointer types can be supported by specializing <code class="computeroutput"><span class="identifier">pointee</span><span class="special">&lt;</span><span class="identifier">HeldType</span><span class="special">&gt;</span></code>.
390              </li>
391<li class="listitem">
392                As in case 1 above, when HeldType is a smart pointer to a class derived
393                from <code class="computeroutput"><span class="identifier">T</span></code>, the initial
394                <code class="computeroutput"><span class="identifier">PyObject</span><span class="special">*</span></code>
395                argument must be supplied by all of HeldType's exposed constructors.
396              </li>
397<li class="listitem">
398                Except in cases 1 and 3, users may optionally specify that T itself
399                gets initialized with a similar initial <code class="computeroutput"><span class="identifier">PyObject</span><span class="special">*</span></code> argument by specializing <a class="link" href="utility_and_infrastructure.html#utility_and_infrastructure.boost_python_has_back_reference_.class_template_has_back_referenc" title="Class template has_back_reference">has_back_reference&lt;T&gt;</a>.
400              </li>
401</ol></div>
402</div>
403<div class="section">
404<div class="titlepage"><div><div><h4 class="title">
405<a name="high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel.class_template_class_synopsis"></a><a class="link" href="high_level_components.html#high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel.class_template_class_synopsis" title="Class template class_ synopsis">Class
406          template <code class="computeroutput"><span class="identifier">class_</span></code> synopsis</a>
407</h4></div></div></div>
408<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>
409<span class="special">{</span>
410<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span>
411    <span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Bases</span> <span class="special">=</span> <span class="identifier">bases</span><span class="special">&lt;&gt;</span>
412          <span class="special">,</span> <span class="keyword">class</span> <span class="identifier">HeldType</span> <span class="special">=</span> <span class="identifier">T</span>
413          <span class="special">,</span> <span class="keyword">class</span> <span class="identifier">NonCopyable</span> <span class="special">=</span> <span class="identifier">unspecified</span>
414         <span class="special">&gt;</span>
415<span class="keyword">class</span> <span class="identifier">class_</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">object</span>
416<span class="special">{</span>
417  <span class="comment">// Constructors with default __init__</span>
418  <span class="identifier">class_</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">);</span>
419  <span class="identifier">class_</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">docstring</span><span class="special">);</span>
420
421  <span class="comment">// Constructors, specifying non-default __init__</span>
422  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Init</span><span class="special">&gt;</span>
423  <span class="identifier">class_</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">Init</span><span class="special">);</span>
424  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Init</span><span class="special">&gt;</span>
425  <span class="identifier">class_</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">docstring</span><span class="special">,</span> <span class="identifier">Init</span><span class="special">);</span>
426
427  <span class="comment">// Exposing additional __init__ functions</span>
428  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Init</span><span class="special">&gt;</span>
429  <span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">def</span><span class="special">(</span><span class="identifier">Init</span><span class="special">);</span>
430
431  <span class="comment">// defining methods</span>
432  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">&gt;</span>
433  <span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">def</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">F</span> <span class="identifier">f</span><span class="special">);</span>
434  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A1</span><span class="special">&gt;</span>
435  <span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">def</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">Fn</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">A1</span> <span class="keyword">const</span><span class="special">&amp;);</span>
436  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A2</span><span class="special">&gt;</span>
437  <span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">def</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">Fn</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">A1</span> <span class="keyword">const</span><span class="special">&amp;,</span> <span class="identifier">A2</span> <span class="keyword">const</span><span class="special">&amp;);</span>
438  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A3</span><span class="special">&gt;</span>
439  <span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">def</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">Fn</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">A1</span> <span class="keyword">const</span><span class="special">&amp;,</span> <span class="identifier">A2</span> <span class="keyword">const</span><span class="special">&amp;,</span> <span class="identifier">A3</span> <span class="keyword">const</span><span class="special">&amp;);</span>
440
441  <span class="comment">// declaring method as static</span>
442  <span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">staticmethod</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">);</span>
443
444  <span class="comment">// exposing operators</span>
445  <span class="keyword">template</span> <span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span>
446  <span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">def</span><span class="special">(</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;);</span>
447
448  <span class="comment">// Raw attribute modification</span>
449  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</span>
450  <span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">setattr</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">U</span> <span class="keyword">const</span><span class="special">&amp;);</span>
451
452  <span class="comment">// exposing data members</span>
453  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">&gt;</span>
454  <span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">def_readonly</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">D</span> <span class="identifier">T</span><span class="special">::*</span><span class="identifier">pm</span><span class="special">);</span>
455
456  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">&gt;</span>
457  <span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">def_readwrite</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">D</span> <span class="identifier">T</span><span class="special">::*</span><span class="identifier">pm</span><span class="special">);</span>
458
459  <span class="comment">// exposing static data members</span>
460  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">&gt;</span>
461  <span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">def_readonly</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">D</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">d</span><span class="special">);</span>
462  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">&gt;</span>
463  <span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">def_readwrite</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">D</span><span class="special">&amp;</span> <span class="identifier">d</span><span class="special">);</span>
464
465  <span class="comment">// property creation</span>
466  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Get</span><span class="special">&gt;</span>
467  <span class="keyword">void</span> <span class="identifier">add_property</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">Get</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">fget</span><span class="special">,</span> <span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">doc</span><span class="special">=</span><span class="number">0</span><span class="special">);</span>
468  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Get</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Set</span><span class="special">&gt;</span>
469  <span class="keyword">void</span> <span class="identifier">add_property</span><span class="special">(</span>
470      <span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">Get</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">fget</span><span class="special">,</span> <span class="identifier">Set</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">fset</span><span class="special">,</span> <span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">doc</span><span class="special">=</span><span class="number">0</span><span class="special">);</span>
471
472  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Get</span><span class="special">&gt;</span>
473  <span class="keyword">void</span> <span class="identifier">add_static_property</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">Get</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">fget</span><span class="special">);</span>
474  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Get</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Set</span><span class="special">&gt;</span>
475  <span class="keyword">void</span> <span class="identifier">add_static_property</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">Get</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">fget</span><span class="special">,</span> <span class="identifier">Set</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">fset</span><span class="special">);</span>
476
477  <span class="comment">// pickle support</span>
478  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">PickleSuite</span><span class="special">&gt;</span>
479  <span class="identifier">self</span><span class="special">&amp;</span> <span class="identifier">def_pickle</span><span class="special">(</span><span class="identifier">PickleSuite</span> <span class="keyword">const</span><span class="special">&amp;);</span>
480  <span class="identifier">self</span><span class="special">&amp;</span> <span class="identifier">enable_pickling</span><span class="special">();</span>
481<span class="special">};</span>
482<span class="special">}}</span>
483</pre>
484</div>
485<div class="section">
486<div class="titlepage"><div><div><h4 class="title">
487<a name="high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel.class_template_class_constructor"></a><a class="link" href="high_level_components.html#high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel.class_template_class_constructor" title="Class template class_ constructors">Class
488          template <code class="computeroutput"><span class="identifier">class_</span></code> constructors</a>
489</h4></div></div></div>
490<pre class="programlisting"><span class="identifier">class_</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">);</span>
491<span class="identifier">class_</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">docstring</span><span class="special">);</span>
492<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Init</span><span class="special">&gt;</span>
493<span class="identifier">class_</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">Init</span> <span class="identifier">init_spec</span><span class="special">);</span>
494<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Init</span><span class="special">&gt;</span>
495<span class="identifier">class_</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">docstring</span><span class="special">,</span> <span class="identifier">Init</span> <span class="identifier">init_spec</span><span class="special">);</span>
496</pre>
497<div class="variablelist">
498<p class="title"><b></b></p>
499<dl class="variablelist">
500<dt><span class="term">Requires</span></dt>
501<dd><p>
502                  name is an <a class="link" href="glossary.html#ntbs">ntbs</a> which conforms to Python's
503                  <a href="http://www.python.org/doc/current/ref/identifiers.html" target="_top">identifier
504                  naming rules</a>. If docstring is supplied, it must be an
505                  <a class="link" href="glossary.html#ntbs">ntbs</a>. If <code class="computeroutput"><span class="identifier">init_spec</span></code>
506                  is supplied, it must be either the special enumeration constant
507                  <code class="computeroutput"><span class="identifier">no_init</span></code> or an
508                  <a class="link" href="high_level_components/boost_python_init_hpp.html#high_level_components.boost_python_init_hpp.introduction.init_expressions" title="init-expressions">init-expression</a>
509                  compatible with <code class="computeroutput"><span class="identifier">T</span></code>.
510                </p></dd>
511<dt><span class="term">Effects</span></dt>
512<dd>
513<p>
514                  Constructs a <code class="computeroutput"><span class="identifier">class_</span></code>
515                  object holding a Boost.Python extension class named name. The named
516                  attribute of the <a class="link" href="high_level_components/boost_python_scope_hpp.html#high_level_components.boost_python_scope_hpp.introduction" title="Introduction">current
517                  scope</a> is bound to the new extension class.
518                </p>
519<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
520<li class="listitem">
521                      If supplied, the value of docstring is bound to the <code class="computeroutput"><span class="identifier">__doc__</span></code> attribute of the
522                      extension class.
523                    </li>
524<li class="listitem">
525                      If <code class="computeroutput"><span class="identifier">init_spec</span></code>
526                      is <code class="computeroutput"><span class="identifier">no_init</span></code>,
527                      a special <code class="computeroutput"><span class="identifier">__init__</span></code>
528                      function is generated which always raises a Python exception.
529                      Otherwise, <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">init_spec</span><span class="special">)</span></code> is called.
530                    </li>
531<li class="listitem">
532                      If <code class="computeroutput"><span class="identifier">init_spec</span></code>
533                      is not supplied, <code class="computeroutput"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">init</span><span class="special">&lt;&gt;())</span></code> is called.
534                    </li>
535</ul></div>
536</dd>
537<dt><span class="term">Rationale</span></dt>
538<dd><p>
539                  Allowing the user to specify constructor arguments in the <code class="computeroutput"><span class="identifier">class_</span><span class="special">&lt;&gt;</span></code>
540                  constructor helps her to avoid the common run-time errors which
541                  result from invoking wrapped member functions without having exposed
542                  an <code class="computeroutput"><span class="identifier">__init__</span></code> function
543                  which creates the requisite <code class="computeroutput"><span class="identifier">T</span></code>
544                  instance. Types which are not default-constructible will cause
545                  a compile-time error unless <code class="computeroutput"><span class="identifier">Init</span></code>
546                  is supplied. The user must always supply name as there is currently
547                  no portable method to derive the text of the class name from its
548                  type.
549                </p></dd>
550</dl>
551</div>
552</div>
553<div class="section">
554<div class="titlepage"><div><div><h4 class="title">
555<a name="high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel.class_template_class_modifier_fu"></a><a class="link" href="high_level_components.html#high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel.class_template_class_modifier_fu" title="Class template class_ modifier functions">Class
556          template <code class="computeroutput"><span class="identifier">class_</span></code> modifier
557          functions</a>
558</h4></div></div></div>
559<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Init</span><span class="special">&gt;</span>
560<span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">def</span><span class="special">(</span><span class="identifier">Init</span> <span class="identifier">init_expr</span><span class="special">);</span>
561</pre>
562<div class="variablelist">
563<p class="title"><b></b></p>
564<dl class="variablelist">
565<dt><span class="term">Requires</span></dt>
566<dd><p>
567                  <code class="computeroutput"><span class="identifier">init_expr</span></code> is the
568                  result of an <a class="link" href="high_level_components/boost_python_init_hpp.html#high_level_components.boost_python_init_hpp.introduction.init_expressions" title="init-expressions">init-expression</a>
569                  compatible with <code class="computeroutput"><span class="identifier">T</span></code>.
570                </p></dd>
571<dt><span class="term">Effects</span></dt>
572<dd><p>
573                  For each <a class="link" href="high_level_components/boost_python_init_hpp.html#high_level_components.boost_python_init_hpp.introduction.init_expressions" title="init-expressions">valid
574                  prefix</a> <code class="computeroutput"><span class="identifier">P</span></code>
575                  of <code class="computeroutput"><span class="identifier">Init</span></code>, adds an
576                  <code class="computeroutput"><span class="identifier">__init__</span><span class="special">(...)</span></code>
577                  function overload to the extension class accepting P as arguments.
578                  Each overload generated constructs an object of HeldType according
579                  to the semantics described above, using a copy of init_expr's call
580                  policies. If the longest <a class="link" href="high_level_components/boost_python_init_hpp.html#high_level_components.boost_python_init_hpp.introduction.init_expressions" title="init-expressions">valid
581                  prefix</a> of Init contains N types and init_expr holds M keywords,
582                  an initial sequence of the keywords are used for all but the first
583                  N - M arguments of each overload.
584                </p></dd>
585<dt><span class="term">Returns</span></dt>
586<dd><p>
587                  <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
588                </p></dd>
589<dt><span class="term">Rationale</span></dt>
590<dd><p>
591                  Allows users to easily expose a class' constructor to Python.
592                </p></dd>
593</dl>
594</div>
595<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">&gt;</span>
596<span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">def</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">Fn</span> <span class="identifier">fn</span><span class="special">);</span>
597<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A1</span><span class="special">&gt;</span>
598<span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">def</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">Fn</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">A1</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">a1</span><span class="special">);</span>
599<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A2</span><span class="special">&gt;</span>
600<span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">def</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">Fn</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">A1</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">a1</span><span class="special">,</span> <span class="identifier">A2</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">a2</span><span class="special">);</span>
601<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Fn</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A3</span><span class="special">&gt;</span>
602<span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">def</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">Fn</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">A1</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">a1</span><span class="special">,</span> <span class="identifier">A2</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">a2</span><span class="special">,</span> <span class="identifier">A3</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">a3</span><span class="special">);</span>
603</pre>
604<div class="variablelist">
605<p class="title"><b></b></p>
606<dl class="variablelist">
607<dt><span class="term">Requires</span></dt>
608<dd>
609<p>
610                  name is an <a class="link" href="glossary.html#ntbs">ntbs</a> which conforms to Python's
611                  <a href="http://www.python.org/doc/current/ref/identifiers.html" target="_top">identifier
612                  naming rules</a>. * If a1 is the result of an <a class="link" href="function_invocation_and_creation/boost_python_overloads_hpp.html#function_invocation_and_creation.boost_python_overloads_hpp.introduction.overload_dispatch_expressions" title="overload-dispatch-expressions">overload-dispatch-expression</a>,
613                  only the second form is allowed and fn must be a pointer to function
614                  or pointer to member function whose <a class="link" href="glossary.html#arity">arity</a>
615                  is the same as A1's <a class="link" href="function_invocation_and_creation/boost_python_overloads_hpp.html#function_invocation_and_creation.boost_python_overloads_hpp.introduction.overload_dispatch_expressions" title="overload-dispatch-expressions">maximum
616                  arity</a>.
617                </p>
618<p>
619                  <span class="bold"><strong>Effects:</strong></span> For each prefix <code class="computeroutput"><span class="identifier">P</span></code> of <code class="computeroutput"><span class="identifier">Fn</span></code>'s
620                  sequence of argument types, beginning with the one whose length
621                  is <code class="computeroutput"><span class="identifier">A1</span></code>'s <a class="link" href="function_invocation_and_creation/boost_python_overloads_hpp.html#function_invocation_and_creation.boost_python_overloads_hpp.introduction.overload_dispatch_expressions" title="overload-dispatch-expressions">minimum
622                  arity</a>, adds a <code class="computeroutput"><span class="identifier">name</span><span class="special">(...)</span></code> method overload to the extension
623                  class. Each overload generated invokes a1's call-expression with
624                  <code class="computeroutput"><span class="identifier">P</span></code>, using a copy
625                  of a1's call policies. If the longest valid prefix of <code class="computeroutput"><span class="identifier">A1</span></code> contains <code class="computeroutput"><span class="identifier">N</span></code>
626                  types and a1 holds <code class="computeroutput"><span class="identifier">M</span></code>
627                  keywords, an initial sequence of the keywords are used for all
628                  but the first <code class="computeroutput"><span class="identifier">N</span> <span class="special">-</span> <span class="identifier">M</span></code>
629                  arguments of each overload.
630                </p>
631<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
632                      Otherwise, a single method overload is built around fn, which
633                      must not be null:
634                      <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
635<li class="listitem">
636                            If fn is a function pointer, its first argument must
637                            be of the form U, U cv&amp;, U cv*, or U cv* const&amp;,
638                            where T* is convertible to U*, and a1-a3, if supplied,
639                            may be selected in any order from the table below.
640                          </li>
641<li class="listitem">
642                            Otherwise, if fn is a member function pointer, its target
643                            must be T or one of its public base classes, and a1-a3,
644                            if supplied, may be selected in any order from the table
645                            below.
646                          </li>
647<li class="listitem">
648<p class="simpara">
649                            Otherwise, Fn must be [derived from] <a class="link" href="object_wrappers/boost_python_object_hpp.html#object_wrappers.boost_python_object_hpp.class_object" title="Class object">object</a>,
650                            and a1-a2, if supplied, may be selcted in any order from
651                            the first two rows of the table below. To be useful,
652                            fn should be <a href="http://www.python.org/doc/current/lib/built-in-funcs.html#l2h-6" target="_top">callable</a>.
653                          </p>
654<div class="informaltable"><table class="table">
655<colgroup>
656<col>
657<col>
658<col>
659</colgroup>
660<thead><tr>
661<th>
662                                    <p>
663                                      Mnemonic Name
664                                    </p>
665                                  </th>
666<th>
667                                    <p>
668                                      Requirements/Type properties
669                                    </p>
670                                  </th>
671<th>
672                                    <p>
673                                      Effects
674                                    </p>
675                                  </th>
676</tr></thead>
677<tbody>
678<tr>
679<td>
680                                    <p>
681                                      docstring
682                                    </p>
683                                  </td>
684<td>
685                                    <p>
686                                      Any <a class="link" href="glossary.html#ntbs">ntbs</a>
687                                    </p>
688                                  </td>
689<td>
690                                    <p>
691                                      Value will be bound to the __doc__ attribute
692                                      of the resulting method overload. If an earlier
693                                      overload supplied a docstring, two newline
694                                      characters and the new docstring are appended
695                                      to it.
696                                    </p>
697                                  </td>
698</tr>
699<tr>
700<td>
701                                    <p>
702                                      policies
703                                    </p>
704                                  </td>
705<td>
706                                    <p>
707                                      A model of <a class="link" href="concepts.html#concepts.callpolicies" title="CallPolicies">CallPolicies</a>
708                                    </p>
709                                  </td>
710<td>
711                                    <p>
712                                      A copy will be used as the call policies of
713                                      the resulting method overload.
714                                    </p>
715                                  </td>
716</tr>
717<tr>
718<td>
719                                    <p>
720                                      keywords
721                                    </p>
722                                  </td>
723<td>
724                                    <p>
725                                      The result of a <a class="link" href="function_invocation_and_creation.html#function_invocation_and_creation.boost_python_args_hpp.introduction.keyword_expressions" title="keyword-expressions">keyword-expression</a>
726                                      specifying no more arguments than the <a class="link" href="glossary.html#arity">arity</a> of fn.
727                                    </p>
728                                  </td>
729<td>
730                                    <p>
731                                      A copy will be used as the call policies of
732                                      the resulting method overload.
733                                    </p>
734                                  </td>
735</tr>
736</tbody>
737</table></div>
738</li>
739</ul></div>
740                    </li></ul></div>
741</dd>
742<dt><span class="term">Returns</span></dt>
743<dd><p>
744                  <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
745                </p></dd>
746</dl>
747</div>
748<pre class="programlisting"><span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">staticmethod</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">);</span></pre>
749<div class="variablelist">
750<p class="title"><b></b></p>
751<dl class="variablelist">
752<dt><span class="term">Requires</span></dt>
753<dd><p>
754                  name is an <a class="link" href="glossary.html#ntbs">ntbs</a> which conforms to Python's
755                  <a href="http://www.python.org/doc/current/ref/identifiers.html" target="_top">identifier
756                  naming rules</a>, and corresponds to a method whose overloads
757                  have all been defined.
758                </p></dd>
759<dt><span class="term">Effects</span></dt>
760<dd><p>
761                  Replaces the existing named attribute <code class="computeroutput"><span class="identifier">x</span></code>
762                  with the result of invoking <code class="computeroutput"><span class="identifier">staticmethod</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span></code> in Python. Specifies that the
763                  corresponding method is static and therefore no object instance
764                  will be passed to it. This is equivalent to the Python statement:
765                </p></dd>
766</dl>
767</div>
768<pre class="programlisting"><span class="identifier">setattr</span><span class="special">(</span><span class="identifier">self</span><span class="special">,</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">staticmethod</span><span class="special">(</span><span class="identifier">getattr</span><span class="special">(</span><span class="identifier">self</span><span class="special">,</span> <span class="identifier">name</span><span class="special">)))</span></pre>
769<div class="variablelist">
770<p class="title"><b></b></p>
771<dl class="variablelist">
772<dt><span class="term">Note</span></dt>
773<dd><p>
774                  Attempting to invoke def(name,...) after invoking staticmethod(name)
775                  will <a class="link" href="glossary.html#raise">raise</a> a RuntimeError.
776                </p></dd>
777<dt><span class="term">Returns</span></dt>
778<dd><p>
779                  <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
780                </p></dd>
781</dl>
782</div>
783<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span>
784<span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">def</span><span class="special">(</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;);</span>
785</pre>
786<div class="variablelist">
787<p class="title"><b></b></p>
788<dl class="variablelist">
789<dt><span class="term">Effects</span></dt>
790<dd><p>
791                  Adds a Python <a href="http://www.python.org/doc/ref/specialnames.html" target="_top">special
792                  method</a> as described <a class="link" href="high_level_components/boost_python_operators_hpp.html" title="boost/python/operators.hpp">here</a>.
793                </p></dd>
794<dt><span class="term">Returns</span></dt>
795<dd><p>
796                  <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
797                </p></dd>
798</dl>
799</div>
800<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</span>
801<span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">setattr</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">U</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">u</span><span class="special">);</span>
802</pre>
803<div class="variablelist">
804<p class="title"><b></b></p>
805<dl class="variablelist">
806<dt><span class="term">Requires</span></dt>
807<dd><p>
808                  name is an <a class="link" href="glossary.html#ntbs">ntbs</a> which conforms to Python's
809                  <a href="http://www.python.org/doc/current/ref/identifiers.html" target="_top">identifier
810                  naming rules</a>.
811                </p></dd>
812<dt><span class="term">Effects</span></dt>
813<dd>
814<p>
815                  Converts <code class="computeroutput"><span class="identifier">u</span></code> to Python
816                  and adds it to the attribute dictionary of the extension class:
817                </p>
818<pre class="programlisting"><span class="identifier">PyObject_SetAttrString</span><span class="special">(</span><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">ptr</span><span class="special">(),</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">object</span><span class="special">(</span><span class="identifier">u</span><span class="special">).</span><span class="identifier">ptr</span><span class="special">());</span></pre>
819</dd>
820<dt><span class="term">Returns</span></dt>
821<dd><p>
822                  <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
823                </p></dd>
824</dl>
825</div>
826<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Get</span><span class="special">&gt;</span>
827<span class="keyword">void</span> <span class="identifier">add_property</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">Get</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">fget</span><span class="special">,</span> <span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">doc</span><span class="special">=</span><span class="number">0</span><span class="special">);</span>
828<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Get</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Set</span><span class="special">&gt;</span>
829<span class="keyword">void</span> <span class="identifier">add_property</span><span class="special">(</span>
830      <span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">Get</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">fget</span><span class="special">,</span> <span class="identifier">Set</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">fset</span><span class="special">,</span> <span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">doc</span><span class="special">=</span><span class="number">0</span><span class="special">);</span>
831</pre>
832<div class="variablelist">
833<p class="title"><b></b></p>
834<dl class="variablelist">
835<dt><span class="term">Requires</span></dt>
836<dd><p>
837                  name is an <a class="link" href="glossary.html#ntbs">ntbs</a> which conform to Python's
838                  <a href="http://www.python.org/doc/current/ref/identifiers.html" target="_top">identifier
839                  naming rules</a>.
840                </p></dd>
841<dt><span class="term">Effects</span></dt>
842<dd><p>
843                  Creates a new Python <a href="http://www.python.org/2.2.2/descrintro.html#property" target="_top">property</a>
844                  class instance, passing <code class="computeroutput"><span class="identifier">object</span><span class="special">(</span><span class="identifier">fget</span><span class="special">)</span></code> (and <code class="computeroutput"><span class="identifier">object</span><span class="special">(</span><span class="identifier">fset</span><span class="special">)</span></code> in the second form) with an (optional)
845                  docstring <code class="computeroutput"><span class="identifier">doc</span></code> to
846                  its constructor, then adds that property to the Python class object
847                  under construction with the given attribute name.
848                </p></dd>
849<dt><span class="term">Returns</span></dt>
850<dd><p>
851                  <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
852                </p></dd>
853<dt><span class="term">Rationale</span></dt>
854<dd><p>
855                  Allows users to easily expose functions that can be invoked from
856                  Python with attribute access syntax.
857                </p></dd>
858</dl>
859</div>
860<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Get</span><span class="special">&gt;</span>
861<span class="keyword">void</span> <span class="identifier">add_static_property</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">Get</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">fget</span><span class="special">);</span>
862<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Get</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Set</span><span class="special">&gt;</span>
863<span class="keyword">void</span> <span class="identifier">add_static_property</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">Get</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">fget</span><span class="special">,</span> <span class="identifier">Set</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">fset</span><span class="special">);</span>
864</pre>
865<div class="variablelist">
866<p class="title"><b></b></p>
867<dl class="variablelist">
868<dt><span class="term">Requires</span></dt>
869<dd><p>
870                  name is an <a class="link" href="glossary.html#ntbs">ntbs</a> which conforms to Python's
871                  <a href="http://www.python.org/doc/current/ref/identifiers.html" target="_top">identifier
872                  naming rules</a>.
873                </p></dd>
874<dt><span class="term">Effects</span></dt>
875<dd><p>
876                  Creates a Boost.Python.StaticProperty object, passing <code class="computeroutput"><span class="identifier">object</span><span class="special">(</span><span class="identifier">fget</span><span class="special">)</span></code>
877                  (and <code class="computeroutput"><span class="identifier">object</span><span class="special">(</span><span class="identifier">fset</span><span class="special">)</span></code>
878                  in the second form) to its constructor, then adds that property
879                  to the Python class under construction with the given attribute
880                  name. StaticProperty is a special subclass of Python's property
881                  class which can be called without an initial self argument.
882                </p></dd>
883<dt><span class="term">Returns</span></dt>
884<dd><p>
885                  <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
886                </p></dd>
887<dt><span class="term">Rationale</span></dt>
888<dd><p>
889                  Allows users to easily expose functions that can be invoked from
890                  Python with static attribute access syntax.
891                </p></dd>
892</dl>
893</div>
894<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">&gt;</span>
895<span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">def_readonly</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">D</span> <span class="identifier">T</span><span class="special">::*</span><span class="identifier">pm</span><span class="special">,</span> <span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">doc</span><span class="special">=</span><span class="number">0</span><span class="special">);</span>
896<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">&gt;</span>
897<span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">def_readonly</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">D</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">d</span><span class="special">);</span>
898</pre>
899<div class="variablelist">
900<p class="title"><b></b></p>
901<dl class="variablelist">
902<dt><span class="term">Requires</span></dt>
903<dd><p>
904                  name is an <a class="link" href="glossary.html#ntbs">ntbs</a> which conforms to Python's
905                  <a href="http://www.python.org/doc/current/ref/identifiers.html" target="_top">identifier
906                  naming rules</a>. <code class="computeroutput"><span class="identifier">doc</span></code>
907                  is also an <a class="link" href="glossary.html#ntbs">ntbs</a>.
908                </p></dd>
909<dt><span class="term">Effects</span></dt>
910<dd>
911<pre class="programlisting"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">add_property</span><span class="special">(</span><span class="identifier">name</span><span class="special">,</span> <span class="identifier">make_getter</span><span class="special">(</span><span class="identifier">pm</span><span class="special">),</span> <span class="identifier">doc</span><span class="special">);</span></pre>
912<p>
913                  and
914                </p>
915<pre class="programlisting"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">add_static_property</span><span class="special">(</span><span class="identifier">name</span><span class="special">,</span> <span class="identifier">make_getter</span><span class="special">(</span><span class="identifier">d</span><span class="special">));</span></pre>
916<p>
917                  respectively.
918                </p>
919</dd>
920<dt><span class="term">Returns</span></dt>
921<dd><p>
922                  <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
923                </p></dd>
924<dt><span class="term">Rationale</span></dt>
925<dd><p>
926                  Allows users to easily expose a class' data member or free variable
927                  such that it can be inspected from Python with a natural syntax.
928                </p></dd>
929</dl>
930</div>
931<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">&gt;</span>
932<span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">def_readwrite</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">D</span> <span class="identifier">T</span><span class="special">::*</span><span class="identifier">pm</span><span class="special">,</span> <span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">doc</span><span class="special">=</span><span class="number">0</span><span class="special">);</span>
933<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">&gt;</span>
934<span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">def_readwrite</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">name</span><span class="special">,</span> <span class="identifier">D</span><span class="special">&amp;</span> <span class="identifier">d</span><span class="special">);</span>
935</pre>
936<div class="variablelist">
937<p class="title"><b></b></p>
938<dl class="variablelist">
939<dt><span class="term">Effects</span></dt>
940<dd>
941<pre class="programlisting"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">add_property</span><span class="special">(</span><span class="identifier">name</span><span class="special">,</span> <span class="identifier">make_getter</span><span class="special">(</span><span class="identifier">pm</span><span class="special">),</span> <span class="identifier">make_setter</span><span class="special">(</span><span class="identifier">pm</span><span class="special">),</span> <span class="identifier">doc</span><span class="special">);</span></pre>
942<p>
943                  and
944                </p>
945<pre class="programlisting"><span class="keyword">this</span><span class="special">-&gt;</span><span class="identifier">add_static_property</span><span class="special">(</span><span class="identifier">name</span><span class="special">,</span> <span class="identifier">make_getter</span><span class="special">(</span><span class="identifier">d</span><span class="special">),</span> <span class="identifier">make_setter</span><span class="special">(</span><span class="identifier">d</span><span class="special">));</span></pre>
946<p>
947                  respectively.
948                </p>
949</dd>
950<dt><span class="term">Returns</span></dt>
951<dd><p>
952                  <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
953                </p></dd>
954<dt><span class="term">Rationale</span></dt>
955<dd><p>
956                  Allows users to easily expose a class' data or free variable member
957                  such that it can be inspected and set from Python with a natural
958                  syntax.
959                </p></dd>
960</dl>
961</div>
962<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">PickleSuite</span><span class="special">&gt;</span>
963<span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">def_pickle</span><span class="special">(</span><span class="identifier">PickleSuite</span> <span class="keyword">const</span><span class="special">&amp;);</span>
964</pre>
965<div class="variablelist">
966<p class="title"><b></b></p>
967<dl class="variablelist">
968<dt><span class="term">Requires</span></dt>
969<dd><p>
970                  PickleSuite must be publically derived from <a class="link" href="topics/pickle_support.html#topics.pickle_support.the_pickle_interface" title="The Pickle Interface">pickle_suite</a>.
971                </p></dd>
972<dt><span class="term">Effects</span></dt>
973<dd><p>
974                  Defines a legal combination of the special attributes and methods:
975                  __getinitargs__, __getstate__, __setstate__, __getstate_manages_dict__,
976                  __safe_for_unpickling__, __reduce__
977                </p></dd>
978<dt><span class="term">Returns</span></dt>
979<dd><p>
980                  <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
981                </p></dd>
982<dt><span class="term">Rationale</span></dt>
983<dd><p>
984                  Provides an <a class="link" href="topics/pickle_support.html#topics.pickle_support.the_pickle_interface" title="The Pickle Interface">easy
985                  to use high-level interface</a> for establishing complete <a class="link" href="topics/pickle_support.html#topics.pickle_support.the_pickle_interface" title="The Pickle Interface">pickle support</a>
986                  for the wrapped class. The user is protected by compile-time consistency
987                  checks.
988                </p></dd>
989</dl>
990</div>
991<pre class="programlisting"><span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">enable_pickling</span><span class="special">();</span></pre>
992<div class="variablelist">
993<p class="title"><b></b></p>
994<dl class="variablelist">
995<dt><span class="term">Effects</span></dt>
996<dd><p>
997                  Defines the __reduce__ method and the __safe_for_unpickling__ attribute.
998                </p></dd>
999<dt><span class="term">Returns</span></dt>
1000<dd><p>
1001                  <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
1002                </p></dd>
1003<dt><span class="term">Rationale</span></dt>
1004<dd><p>
1005                  Light-weight alternative to def_pickle(). Enables implementation
1006                  of pickle support from Python.
1007                </p></dd>
1008</dl>
1009</div>
1010</div>
1011</div>
1012<div class="section">
1013<div class="titlepage"><div><div><h3 class="title">
1014<a name="high_level_components.boost_python_class_hpp.class_template_bases_t1_t2_tn"></a><a class="link" href="high_level_components.html#high_level_components.boost_python_class_hpp.class_template_bases_t1_t2_tn" title="Class template bases&lt;T1, T2, ...TN&gt;">Class
1015        template bases&lt;T1, T2, ...TN&gt;</a>
1016</h3></div></div></div>
1017<div class="toc"><dl class="toc"><dt><span class="section"><a href="high_level_components.html#high_level_components.boost_python_class_hpp.class_template_bases_t1_t2_tn.class_template_bases_synopsis">Class
1018          template bases synopsis</a></span></dt></dl></div>
1019<p>
1020          An MPL sequence which can be used in class_&lt;...&gt; instantiations indicate
1021          a list of base classes.
1022        </p>
1023<div class="section">
1024<div class="titlepage"><div><div><h4 class="title">
1025<a name="high_level_components.boost_python_class_hpp.class_template_bases_t1_t2_tn.class_template_bases_synopsis"></a><a class="link" href="high_level_components.html#high_level_components.boost_python_class_hpp.class_template_bases_t1_t2_tn.class_template_bases_synopsis" title="Class template bases synopsis">Class
1026          template bases synopsis</a>
1027</h4></div></div></div>
1028<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>
1029<span class="special">{</span>
1030  <span class="keyword">template</span> <span class="special">&lt;</span><span class="identifier">T1</span> <span class="special">=</span> <span class="identifier">unspecified</span><span class="special">,...</span><span class="identifier">Tn</span> <span class="special">=</span> <span class="identifier">unspecified</span><span class="special">&gt;</span>
1031  <span class="keyword">struct</span> <span class="identifier">bases</span>
1032  <span class="special">{};</span>
1033<span class="special">}}</span>
1034</pre>
1035</div>
1036</div>
1037<div class="section">
1038<div class="titlepage"><div><div><h3 class="title">
1039<a name="high_level_components.boost_python_class_hpp.examples"></a><a class="link" href="high_level_components.html#high_level_components.boost_python_class_hpp.examples" title="Examples">Examples</a>
1040</h3></div></div></div>
1041<p>
1042          Given a C++ class declaration:
1043        </p>
1044<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">Foo</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">Bar</span><span class="special">,</span> <span class="keyword">public</span> <span class="identifier">Baz</span>
1045<span class="special">{</span>
1046 <span class="keyword">public</span><span class="special">:</span>
1047   <span class="identifier">Foo</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">x</span><span class="special">,</span> <span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">y</span><span class="special">);</span>
1048   <span class="identifier">Foo</span><span class="special">(</span><span class="keyword">double</span><span class="special">);</span>
1049
1050   <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">name</span><span class="special">()</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">m_name</span><span class="special">;</span> <span class="special">}</span>
1051   <span class="keyword">void</span> <span class="identifier">name</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*);</span>
1052
1053   <span class="keyword">double</span> <span class="identifier">value</span><span class="special">;</span> <span class="comment">// public data</span>
1054 <span class="keyword">private</span><span class="special">:</span>
1055   <span class="special">...</span>
1056<span class="special">};</span>
1057</pre>
1058<p>
1059          A corresponding Boost.Python extension class can be created with:
1060        </p>
1061<pre class="programlisting"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">python</span><span class="special">;</span>
1062
1063<span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">Foo</span><span class="special">,</span><span class="identifier">bases</span><span class="special">&lt;</span><span class="identifier">Bar</span><span class="special">,</span><span class="identifier">Baz</span><span class="special">&gt;</span> <span class="special">&gt;(</span><span class="string">"Foo"</span><span class="special">,</span>
1064          <span class="string">"This is Foo's docstring."</span>
1065          <span class="string">"It describes our Foo extension class"</span><span class="special">,</span>
1066
1067          <span class="identifier">init</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*&gt;(</span><span class="identifier">args</span><span class="special">(</span><span class="string">"x"</span><span class="special">,</span><span class="string">"y"</span><span class="special">),</span> <span class="string">"__init__ docstring"</span><span class="special">)</span>
1068          <span class="special">)</span>
1069   <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">init</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;())</span>
1070   <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="string">"get_name"</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">Foo</span><span class="special">::</span><span class="identifier">get_name</span><span class="special">,</span> <span class="identifier">return_internal_reference</span><span class="special">&lt;&gt;())</span>
1071   <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="string">"set_name"</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">Foo</span><span class="special">::</span><span class="identifier">set_name</span><span class="special">)</span>
1072   <span class="special">.</span><span class="identifier">def_readwrite</span><span class="special">(</span><span class="string">"value"</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">Foo</span><span class="special">::</span><span class="identifier">value</span><span class="special">);</span>
1073</pre>
1074</div>
1075</div>
1076</div>
1077<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
1078<td align="left"></td>
1079<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2015 David Abrahams, Stefan Seefeld<p>
1080        Distributed under the Boost Software License, Version 1.0. (See accompanying
1081        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>
1082      </p>
1083</div></td>
1084</tr></table>
1085<hr>
1086<div class="spirit-nav">
1087<a accesskey="p" href="concepts/objectwrapper.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="index.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="high_level_components/boost_python_def_hpp.html"><img src="../images/next.png" alt="Next"></a>
1088</div>
1089</body>
1090</html>
1091