high_level_components.html 101 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
  4. <title>Chapter&#160;2.&#160;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&#160;2.&#160;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. <span class="comment">// Constructors, specifying non-default __init__</span>
  421. <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>
  422. <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>
  423. <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>
  424. <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>
  425. <span class="comment">// Exposing additional __init__ functions</span>
  426. <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>
  427. <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>
  428. <span class="comment">// defining methods</span>
  429. <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>
  430. <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>
  431. <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>
  432. <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>
  433. <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>
  434. <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>
  435. <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>
  436. <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>
  437. <span class="comment">// declaring method as static</span>
  438. <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>
  439. <span class="comment">// exposing operators</span>
  440. <span class="keyword">template</span> <span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span>
  441. <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>
  442. <span class="comment">// Raw attribute modification</span>
  443. <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>
  444. <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>
  445. <span class="comment">// exposing data members</span>
  446. <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>
  447. <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>
  448. <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>
  449. <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>
  450. <span class="comment">// exposing static data members</span>
  451. <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>
  452. <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>
  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_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>
  455. <span class="comment">// property creation</span>
  456. <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>
  457. <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>
  458. <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>
  459. <span class="keyword">void</span> <span class="identifier">add_property</span><span class="special">(</span>
  460. <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>
  461. <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>
  462. <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>
  463. <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>
  464. <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>
  465. <span class="comment">// pickle support</span>
  466. <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>
  467. <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>
  468. <span class="identifier">self</span><span class="special">&amp;</span> <span class="identifier">enable_pickling</span><span class="special">();</span>
  469. <span class="special">};</span>
  470. <span class="special">}}</span>
  471. </pre>
  472. </div>
  473. <div class="section">
  474. <div class="titlepage"><div><div><h4 class="title">
  475. <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
  476. template <code class="computeroutput"><span class="identifier">class_</span></code> constructors</a>
  477. </h4></div></div></div>
  478. <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>
  479. <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>
  480. <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>
  481. <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>
  482. <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>
  483. <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>
  484. </pre>
  485. <div class="variablelist">
  486. <p class="title"><b></b></p>
  487. <dl class="variablelist">
  488. <dt><span class="term">Requires</span></dt>
  489. <dd><p>
  490. name is an <a class="link" href="glossary.html#ntbs">ntbs</a> which conforms to Python's
  491. <a href="http://www.python.org/doc/current/ref/identifiers.html" target="_top">identifier
  492. naming rules</a>. If docstring is supplied, it must be an
  493. <a class="link" href="glossary.html#ntbs">ntbs</a>. If <code class="computeroutput"><span class="identifier">init_spec</span></code>
  494. is supplied, it must be either the special enumeration constant
  495. <code class="computeroutput"><span class="identifier">no_init</span></code> or an
  496. <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>
  497. compatible with <code class="computeroutput"><span class="identifier">T</span></code>.
  498. </p></dd>
  499. <dt><span class="term">Effects</span></dt>
  500. <dd>
  501. <p>
  502. Constructs a <code class="computeroutput"><span class="identifier">class_</span></code>
  503. object holding a Boost.Python extension class named name. The named
  504. 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
  505. scope</a> is bound to the new extension class.
  506. </p>
  507. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
  508. <li class="listitem">
  509. If supplied, the value of docstring is bound to the <code class="computeroutput"><span class="identifier">__doc__</span></code> attribute of the
  510. extension class.
  511. </li>
  512. <li class="listitem">
  513. If <code class="computeroutput"><span class="identifier">init_spec</span></code>
  514. is <code class="computeroutput"><span class="identifier">no_init</span></code>,
  515. a special <code class="computeroutput"><span class="identifier">__init__</span></code>
  516. function is generated which always raises a Python exception.
  517. 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.
  518. </li>
  519. <li class="listitem">
  520. If <code class="computeroutput"><span class="identifier">init_spec</span></code>
  521. 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.
  522. </li>
  523. </ul></div>
  524. </dd>
  525. <dt><span class="term">Rationale</span></dt>
  526. <dd><p>
  527. Allowing the user to specify constructor arguments in the <code class="computeroutput"><span class="identifier">class_</span><span class="special">&lt;&gt;</span></code>
  528. constructor helps her to avoid the common run-time errors which
  529. result from invoking wrapped member functions without having exposed
  530. an <code class="computeroutput"><span class="identifier">__init__</span></code> function
  531. which creates the requisite <code class="computeroutput"><span class="identifier">T</span></code>
  532. instance. Types which are not default-constructible will cause
  533. a compile-time error unless <code class="computeroutput"><span class="identifier">Init</span></code>
  534. is supplied. The user must always supply name as there is currently
  535. no portable method to derive the text of the class name from its
  536. type.
  537. </p></dd>
  538. </dl>
  539. </div>
  540. </div>
  541. <div class="section">
  542. <div class="titlepage"><div><div><h4 class="title">
  543. <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
  544. template <code class="computeroutput"><span class="identifier">class_</span></code> modifier
  545. functions</a>
  546. </h4></div></div></div>
  547. <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>
  548. <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>
  549. </pre>
  550. <div class="variablelist">
  551. <p class="title"><b></b></p>
  552. <dl class="variablelist">
  553. <dt><span class="term">Requires</span></dt>
  554. <dd><p>
  555. <code class="computeroutput"><span class="identifier">init_expr</span></code> is the
  556. 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>
  557. compatible with <code class="computeroutput"><span class="identifier">T</span></code>.
  558. </p></dd>
  559. <dt><span class="term">Effects</span></dt>
  560. <dd><p>
  561. 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
  562. prefix</a> <code class="computeroutput"><span class="identifier">P</span></code>
  563. of <code class="computeroutput"><span class="identifier">Init</span></code>, adds an
  564. <code class="computeroutput"><span class="identifier">__init__</span><span class="special">(...)</span></code>
  565. function overload to the extension class accepting P as arguments.
  566. Each overload generated constructs an object of HeldType according
  567. to the semantics described above, using a copy of init_expr's call
  568. 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
  569. prefix</a> of Init contains N types and init_expr holds M keywords,
  570. an initial sequence of the keywords are used for all but the first
  571. N - M arguments of each overload.
  572. </p></dd>
  573. <dt><span class="term">Returns</span></dt>
  574. <dd><p>
  575. <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
  576. </p></dd>
  577. <dt><span class="term">Rationale</span></dt>
  578. <dd><p>
  579. Allows users to easily expose a class' constructor to Python.
  580. </p></dd>
  581. </dl>
  582. </div>
  583. <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>
  584. <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>
  585. <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>
  586. <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>
  587. <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>
  588. <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>
  589. <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>
  590. <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>
  591. </pre>
  592. <div class="variablelist">
  593. <p class="title"><b></b></p>
  594. <dl class="variablelist">
  595. <dt><span class="term">Requires</span></dt>
  596. <dd>
  597. <p>
  598. name is an <a class="link" href="glossary.html#ntbs">ntbs</a> which conforms to Python's
  599. <a href="http://www.python.org/doc/current/ref/identifiers.html" target="_top">identifier
  600. 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>,
  601. only the second form is allowed and fn must be a pointer to function
  602. or pointer to member function whose <a class="link" href="glossary.html#arity">arity</a>
  603. 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
  604. arity</a>.
  605. </p>
  606. <p>
  607. <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
  608. sequence of argument types, beginning with the one whose length
  609. 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
  610. arity</a>, adds a <code class="computeroutput"><span class="identifier">name</span><span class="special">(...)</span></code> method overload to the extension
  611. class. Each overload generated invokes a1's call-expression with
  612. <code class="computeroutput"><span class="identifier">P</span></code>, using a copy
  613. 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>
  614. types and a1 holds <code class="computeroutput"><span class="identifier">M</span></code>
  615. keywords, an initial sequence of the keywords are used for all
  616. but the first <code class="computeroutput"><span class="identifier">N</span> <span class="special">-</span> <span class="identifier">M</span></code>
  617. arguments of each overload.
  618. </p>
  619. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
  620. Otherwise, a single method overload is built around fn, which
  621. must not be null:
  622. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
  623. <li class="listitem">
  624. If fn is a function pointer, its first argument must
  625. be of the form U, U cv&amp;, U cv*, or U cv* const&amp;,
  626. where T* is convertible to U*, and a1-a3, if supplied,
  627. may be selected in any order from the table below.
  628. </li>
  629. <li class="listitem">
  630. Otherwise, if fn is a member function pointer, its target
  631. must be T or one of its public base classes, and a1-a3,
  632. if supplied, may be selected in any order from the table
  633. below.
  634. </li>
  635. <li class="listitem">
  636. <p class="simpara">
  637. 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>,
  638. and a1-a2, if supplied, may be selcted in any order from
  639. the first two rows of the table below. To be useful,
  640. fn should be <a href="http://www.python.org/doc/current/lib/built-in-funcs.html#l2h-6" target="_top">callable</a>.
  641. </p>
  642. <div class="informaltable"><table class="table">
  643. <colgroup>
  644. <col>
  645. <col>
  646. <col>
  647. </colgroup>
  648. <thead><tr>
  649. <th>
  650. <p>
  651. Mnemonic Name
  652. </p>
  653. </th>
  654. <th>
  655. <p>
  656. Requirements/Type properties
  657. </p>
  658. </th>
  659. <th>
  660. <p>
  661. Effects
  662. </p>
  663. </th>
  664. </tr></thead>
  665. <tbody>
  666. <tr>
  667. <td>
  668. <p>
  669. docstring
  670. </p>
  671. </td>
  672. <td>
  673. <p>
  674. Any <a class="link" href="glossary.html#ntbs">ntbs</a>
  675. </p>
  676. </td>
  677. <td>
  678. <p>
  679. Value will be bound to the __doc__ attribute
  680. of the resulting method overload. If an earlier
  681. overload supplied a docstring, two newline
  682. characters and the new docstring are appended
  683. to it.
  684. </p>
  685. </td>
  686. </tr>
  687. <tr>
  688. <td>
  689. <p>
  690. policies
  691. </p>
  692. </td>
  693. <td>
  694. <p>
  695. A model of <a class="link" href="concepts.html#concepts.callpolicies" title="CallPolicies">CallPolicies</a>
  696. </p>
  697. </td>
  698. <td>
  699. <p>
  700. A copy will be used as the call policies of
  701. the resulting method overload.
  702. </p>
  703. </td>
  704. </tr>
  705. <tr>
  706. <td>
  707. <p>
  708. keywords
  709. </p>
  710. </td>
  711. <td>
  712. <p>
  713. 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>
  714. specifying no more arguments than the <a class="link" href="glossary.html#arity">arity</a> of fn.
  715. </p>
  716. </td>
  717. <td>
  718. <p>
  719. A copy will be used as the call policies of
  720. the resulting method overload.
  721. </p>
  722. </td>
  723. </tr>
  724. </tbody>
  725. </table></div>
  726. </li>
  727. </ul></div>
  728. </li></ul></div>
  729. </dd>
  730. <dt><span class="term">Returns</span></dt>
  731. <dd><p>
  732. <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
  733. </p></dd>
  734. </dl>
  735. </div>
  736. <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>
  737. <div class="variablelist">
  738. <p class="title"><b></b></p>
  739. <dl class="variablelist">
  740. <dt><span class="term">Requires</span></dt>
  741. <dd><p>
  742. name is an <a class="link" href="glossary.html#ntbs">ntbs</a> which conforms to Python's
  743. <a href="http://www.python.org/doc/current/ref/identifiers.html" target="_top">identifier
  744. naming rules</a>, and corresponds to a method whose overloads
  745. have all been defined.
  746. </p></dd>
  747. <dt><span class="term">Effects</span></dt>
  748. <dd><p>
  749. Replaces the existing named attribute <code class="computeroutput"><span class="identifier">x</span></code>
  750. 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
  751. corresponding method is static and therefore no object instance
  752. will be passed to it. This is equivalent to the Python statement:
  753. </p></dd>
  754. </dl>
  755. </div>
  756. <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>
  757. <div class="variablelist">
  758. <p class="title"><b></b></p>
  759. <dl class="variablelist">
  760. <dt><span class="term">Note</span></dt>
  761. <dd><p>
  762. Attempting to invoke def(name,...) after invoking staticmethod(name)
  763. will <a class="link" href="glossary.html#raise">raise</a> a RuntimeError.
  764. </p></dd>
  765. <dt><span class="term">Returns</span></dt>
  766. <dd><p>
  767. <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
  768. </p></dd>
  769. </dl>
  770. </div>
  771. <pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span>
  772. <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>
  773. </pre>
  774. <div class="variablelist">
  775. <p class="title"><b></b></p>
  776. <dl class="variablelist">
  777. <dt><span class="term">Effects</span></dt>
  778. <dd><p>
  779. Adds a Python <a href="http://www.python.org/doc/ref/specialnames.html" target="_top">special
  780. method</a> as described <a class="link" href="high_level_components/boost_python_operators_hpp.html" title="boost/python/operators.hpp">here</a>.
  781. </p></dd>
  782. <dt><span class="term">Returns</span></dt>
  783. <dd><p>
  784. <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
  785. </p></dd>
  786. </dl>
  787. </div>
  788. <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>
  789. <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>
  790. </pre>
  791. <div class="variablelist">
  792. <p class="title"><b></b></p>
  793. <dl class="variablelist">
  794. <dt><span class="term">Requires</span></dt>
  795. <dd><p>
  796. name is an <a class="link" href="glossary.html#ntbs">ntbs</a> which conforms to Python's
  797. <a href="http://www.python.org/doc/current/ref/identifiers.html" target="_top">identifier
  798. naming rules</a>.
  799. </p></dd>
  800. <dt><span class="term">Effects</span></dt>
  801. <dd>
  802. <p>
  803. Converts <code class="computeroutput"><span class="identifier">u</span></code> to Python
  804. and adds it to the attribute dictionary of the extension class:
  805. </p>
  806. <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>
  807. </dd>
  808. <dt><span class="term">Returns</span></dt>
  809. <dd><p>
  810. <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
  811. </p></dd>
  812. </dl>
  813. </div>
  814. <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>
  815. <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>
  816. <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>
  817. <span class="keyword">void</span> <span class="identifier">add_property</span><span class="special">(</span>
  818. <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>
  819. </pre>
  820. <div class="variablelist">
  821. <p class="title"><b></b></p>
  822. <dl class="variablelist">
  823. <dt><span class="term">Requires</span></dt>
  824. <dd><p>
  825. name is an <a class="link" href="glossary.html#ntbs">ntbs</a> which conform to Python's
  826. <a href="http://www.python.org/doc/current/ref/identifiers.html" target="_top">identifier
  827. naming rules</a>.
  828. </p></dd>
  829. <dt><span class="term">Effects</span></dt>
  830. <dd><p>
  831. Creates a new Python <a href="http://www.python.org/2.2.2/descrintro.html#property" target="_top">property</a>
  832. 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)
  833. docstring <code class="computeroutput"><span class="identifier">doc</span></code> to
  834. its constructor, then adds that property to the Python class object
  835. under construction with the given attribute name.
  836. </p></dd>
  837. <dt><span class="term">Returns</span></dt>
  838. <dd><p>
  839. <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
  840. </p></dd>
  841. <dt><span class="term">Rationale</span></dt>
  842. <dd><p>
  843. Allows users to easily expose functions that can be invoked from
  844. Python with attribute access syntax.
  845. </p></dd>
  846. </dl>
  847. </div>
  848. <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>
  849. <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>
  850. <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>
  851. <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>
  852. </pre>
  853. <div class="variablelist">
  854. <p class="title"><b></b></p>
  855. <dl class="variablelist">
  856. <dt><span class="term">Requires</span></dt>
  857. <dd><p>
  858. name is an <a class="link" href="glossary.html#ntbs">ntbs</a> which conforms to Python's
  859. <a href="http://www.python.org/doc/current/ref/identifiers.html" target="_top">identifier
  860. naming rules</a>.
  861. </p></dd>
  862. <dt><span class="term">Effects</span></dt>
  863. <dd><p>
  864. 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>
  865. (and <code class="computeroutput"><span class="identifier">object</span><span class="special">(</span><span class="identifier">fset</span><span class="special">)</span></code>
  866. in the second form) to its constructor, then adds that property
  867. to the Python class under construction with the given attribute
  868. name. StaticProperty is a special subclass of Python's property
  869. class which can be called without an initial self argument.
  870. </p></dd>
  871. <dt><span class="term">Returns</span></dt>
  872. <dd><p>
  873. <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
  874. </p></dd>
  875. <dt><span class="term">Rationale</span></dt>
  876. <dd><p>
  877. Allows users to easily expose functions that can be invoked from
  878. Python with static attribute access syntax.
  879. </p></dd>
  880. </dl>
  881. </div>
  882. <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>
  883. <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>
  884. <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>
  885. <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>
  886. </pre>
  887. <div class="variablelist">
  888. <p class="title"><b></b></p>
  889. <dl class="variablelist">
  890. <dt><span class="term">Requires</span></dt>
  891. <dd><p>
  892. name is an <a class="link" href="glossary.html#ntbs">ntbs</a> which conforms to Python's
  893. <a href="http://www.python.org/doc/current/ref/identifiers.html" target="_top">identifier
  894. naming rules</a>. <code class="computeroutput"><span class="identifier">doc</span></code>
  895. is also an <a class="link" href="glossary.html#ntbs">ntbs</a>.
  896. </p></dd>
  897. <dt><span class="term">Effects</span></dt>
  898. <dd>
  899. <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>
  900. <p>
  901. and
  902. </p>
  903. <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>
  904. <p>
  905. respectively.
  906. </p>
  907. </dd>
  908. <dt><span class="term">Returns</span></dt>
  909. <dd><p>
  910. <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
  911. </p></dd>
  912. <dt><span class="term">Rationale</span></dt>
  913. <dd><p>
  914. Allows users to easily expose a class' data member or free variable
  915. such that it can be inspected from Python with a natural syntax.
  916. </p></dd>
  917. </dl>
  918. </div>
  919. <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>
  920. <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>
  921. <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>
  922. <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>
  923. </pre>
  924. <div class="variablelist">
  925. <p class="title"><b></b></p>
  926. <dl class="variablelist">
  927. <dt><span class="term">Effects</span></dt>
  928. <dd>
  929. <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>
  930. <p>
  931. and
  932. </p>
  933. <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>
  934. <p>
  935. respectively.
  936. </p>
  937. </dd>
  938. <dt><span class="term">Returns</span></dt>
  939. <dd><p>
  940. <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
  941. </p></dd>
  942. <dt><span class="term">Rationale</span></dt>
  943. <dd><p>
  944. Allows users to easily expose a class' data or free variable member
  945. such that it can be inspected and set from Python with a natural
  946. syntax.
  947. </p></dd>
  948. </dl>
  949. </div>
  950. <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>
  951. <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>
  952. </pre>
  953. <div class="variablelist">
  954. <p class="title"><b></b></p>
  955. <dl class="variablelist">
  956. <dt><span class="term">Requires</span></dt>
  957. <dd><p>
  958. 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>.
  959. </p></dd>
  960. <dt><span class="term">Effects</span></dt>
  961. <dd><p>
  962. Defines a legal combination of the special attributes and methods:
  963. __getinitargs__, __getstate__, __setstate__, __getstate_manages_dict__,
  964. __safe_for_unpickling__, __reduce__
  965. </p></dd>
  966. <dt><span class="term">Returns</span></dt>
  967. <dd><p>
  968. <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
  969. </p></dd>
  970. <dt><span class="term">Rationale</span></dt>
  971. <dd><p>
  972. Provides an <a class="link" href="topics/pickle_support.html#topics.pickle_support.the_pickle_interface" title="The Pickle Interface">easy
  973. 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>
  974. for the wrapped class. The user is protected by compile-time consistency
  975. checks.
  976. </p></dd>
  977. </dl>
  978. </div>
  979. <pre class="programlisting"><span class="identifier">class_</span><span class="special">&amp;</span> <span class="identifier">enable_pickling</span><span class="special">();</span></pre>
  980. <div class="variablelist">
  981. <p class="title"><b></b></p>
  982. <dl class="variablelist">
  983. <dt><span class="term">Effects</span></dt>
  984. <dd><p>
  985. Defines the __reduce__ method and the __safe_for_unpickling__ attribute.
  986. </p></dd>
  987. <dt><span class="term">Returns</span></dt>
  988. <dd><p>
  989. <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
  990. </p></dd>
  991. <dt><span class="term">Rationale</span></dt>
  992. <dd><p>
  993. Light-weight alternative to def_pickle(). Enables implementation
  994. of pickle support from Python.
  995. </p></dd>
  996. </dl>
  997. </div>
  998. </div>
  999. </div>
  1000. <div class="section">
  1001. <div class="titlepage"><div><div><h3 class="title">
  1002. <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
  1003. template bases&lt;T1, T2, ...TN&gt;</a>
  1004. </h3></div></div></div>
  1005. <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
  1006. template bases synopsis</a></span></dt></dl></div>
  1007. <p>
  1008. An MPL sequence which can be used in class_&lt;...&gt; instantiations indicate
  1009. a list of base classes.
  1010. </p>
  1011. <div class="section">
  1012. <div class="titlepage"><div><div><h4 class="title">
  1013. <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
  1014. template bases synopsis</a>
  1015. </h4></div></div></div>
  1016. <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>
  1017. <span class="special">{</span>
  1018. <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>
  1019. <span class="keyword">struct</span> <span class="identifier">bases</span>
  1020. <span class="special">{};</span>
  1021. <span class="special">}}</span>
  1022. </pre>
  1023. </div>
  1024. </div>
  1025. <div class="section">
  1026. <div class="titlepage"><div><div><h3 class="title">
  1027. <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>
  1028. </h3></div></div></div>
  1029. <p>
  1030. Given a C++ class declaration:
  1031. </p>
  1032. <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>
  1033. <span class="special">{</span>
  1034. <span class="keyword">public</span><span class="special">:</span>
  1035. <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>
  1036. <span class="identifier">Foo</span><span class="special">(</span><span class="keyword">double</span><span class="special">);</span>
  1037. <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>
  1038. <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>
  1039. <span class="keyword">double</span> <span class="identifier">value</span><span class="special">;</span> <span class="comment">// public data</span>
  1040. <span class="keyword">private</span><span class="special">:</span>
  1041. <span class="special">...</span>
  1042. <span class="special">};</span>
  1043. </pre>
  1044. <p>
  1045. A corresponding Boost.Python extension class can be created with:
  1046. </p>
  1047. <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>
  1048. <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>
  1049. <span class="string">"This is Foo's docstring."</span>
  1050. <span class="string">"It describes our Foo extension class"</span><span class="special">,</span>
  1051. <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>
  1052. <span class="special">)</span>
  1053. <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>
  1054. <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>
  1055. <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>
  1056. <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>
  1057. </pre>
  1058. </div>
  1059. </div>
  1060. </div>
  1061. <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
  1062. <td align="left"></td>
  1063. <td align="right"><div class="copyright-footer">Copyright &#169; 2002-2005, 2015 David Abrahams, Stefan Seefeld<p>
  1064. Distributed under the Boost Software License, Version 1.0. (See accompanying
  1065. 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>
  1066. </p>
  1067. </div></td>
  1068. </tr></table>
  1069. <hr>
  1070. <div class="spirit-nav">
  1071. <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>
  1072. </div>
  1073. </body>
  1074. </html>