/
BirdLeon
/
ROBLOX2016
Обзор
Документация
Войти
/
BirdLeon
/
ROBLOX2016
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
Library/boost/libs/python/doc/html/reference/high_level_components.html
1 090 строк
101 KB
PatoFlamejanteTV
full source code
19 дек 2024, 19:11
19 дек 2024, 19:11
05db15d
Код
Авторство
О чём код?
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Chapter 2. High Level Components</title> <link rel="stylesheet" href="../boostbook.css" type="text/css"> <meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> <link rel="home" href="index.html" title="Boost.Python Reference Manual"> <link rel="up" href="index.html" title="Boost.Python Reference Manual"> <link rel="prev" href="concepts/objectwrapper.html" title="ObjectWrapper"> <link rel="next" href="high_level_components/boost_python_def_hpp.html" title="boost/python/def.hpp"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> <table cellpadding="2" width="100%"><tr><td valign="top"><img alt="" width="" height="" src="../images/boost.png"></td></tr></table> <hr> <div class="spirit-nav"> <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> </div> <div class="chapter"> <div class="titlepage"><div><div><h1 class="title"> <a name="high_level_components"></a>Chapter 2. High Level Components</h1></div></div></div> <div class="toc"> <p><b>Table of Contents</b></p> <dl class="toc"> <dt><span class="section"><a href="high_level_components.html#high_level_components.boost_python_class_hpp">boost/python/class.hpp</a></span></dt> <dd><dl> <dt><span class="section"><a href="high_level_components.html#high_level_components.boost_python_class_hpp.introduction">Introduction</a></span></dt> <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 <code class="computeroutput"><span class="identifier">class_</span><span class="special"><</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">></span></code></a></span></dt> <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<T1, T2, ...TN></a></span></dt> <dt><span class="section"><a href="high_level_components.html#high_level_components.boost_python_class_hpp.examples">Examples</a></span></dt> </dl></dd> <dt><span class="section"><a href="high_level_components/boost_python_def_hpp.html">boost/python/def.hpp</a></span></dt> <dd><dl> <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> <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> <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> </dl></dd> <dt><span class="section"><a href="high_level_components/boost_python_def_visitor_hpp.html">boost/python/def_visitor.hpp</a></span></dt> <dd><dl> <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> <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 <code class="computeroutput"><span class="identifier">def_visitor</span></code></a></span></dt> <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> </dl></dd> <dt><span class="section"><a href="high_level_components/boost_python_docstring_options_h.html">boost/python/docstring_options.hpp</a></span></dt> <dd><dl> <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> <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 <code class="computeroutput"><span class="identifier">docstring_options</span></code></a></span></dt> <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 dostring_options constructors</a></span></dt> <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 docstring_options destructor</a></span></dt> <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 <code class="computeroutput"><span class="identifier">docstring_options</span></code> modifier functions</a></span></dt> <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> </dl></dd> <dt><span class="section"><a href="high_level_components/boost_python_enum_hpp.html">boost/python/enum.hpp</a></span></dt> <dd><dl> <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> <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 template <code class="computeroutput"><span class="identifier">enum_</span></code></a></span></dt> <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 template <code class="computeroutput"><span class="identifier">enum_</span></code> constructors</a></span></dt> <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 template <code class="computeroutput"><span class="identifier">enum_</span></code> modifier functions</a></span></dt> <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> </dl></dd> <dt><span class="section"><a href="high_level_components/boost_python_errors_hpp.html">boost/python/errors.hpp</a></span></dt> <dd><dl> <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> <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 <code class="computeroutput"><span class="identifier">error_already_set</span></code></a></span></dt> <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> <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> </dl></dd> <dt><span class="section"><a href="high_level_components/boost_python_exception_translato.html">boost/python/exception_translator.hpp</a></span></dt> <dd><dl> <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> <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 <code class="computeroutput"><span class="identifier">register_exception_translator</span></code></a></span></dt> <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> </dl></dd> <dt><span class="section"><a href="high_level_components/boost_python_init_hpp.html">boost/python/init.hpp</a></span></dt> <dd><dl> <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> <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 template <code class="computeroutput"><span class="identifier">init</span></code></a></span></dt> <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 template <code class="computeroutput"><span class="identifier">optional</span></code> </a></span></dt> <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> </dl></dd> <dt><span class="section"><a href="high_level_components/boost_python_iterator_hpp.html">boost/python/iterator.hpp</a></span></dt> <dd><dl> <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> <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 template <code class="computeroutput"><span class="identifier">iterator</span></code></a></span></dt> <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 template iterator constructors</a></span></dt> <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 template <code class="computeroutput"><span class="identifier">iterators</span></code></a></span></dt> <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 template iterators nested types</a></span></dt> <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 template iterators static functions</a></span></dt> <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> <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> </dl></dd> <dt><span class="section"><a href="high_level_components/boost_python_module_hpp.html">boost/python/module.hpp</a></span></dt> <dd><dl> <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> <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> <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> </dl></dd> <dt><span class="section"><a href="high_level_components/boost_python_operators_hpp.html">boost/python/operators.hpp</a></span></dt> <dd><dl> <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> <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 <code class="computeroutput"><span class="identifier">self_ns</span><span class="special">::</span><span class="identifier">self_t</span></code></a></span></dt> <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 template <code class="computeroutput"><span class="identifier">other</span></code></a></span></dt> <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 template <code class="computeroutput"><span class="identifier">detail</span><span class="special">::</span><span class="identifier">operator_</span></code></a></span></dt> <dt><span class="section"><a href="high_level_components/boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.object_self">Object <code class="computeroutput"><span class="identifier">self</span></code></a></span></dt> <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> </dl></dd> <dt><span class="section"><a href="high_level_components/boost_python_scope_hpp.html">boost/python/scope.hpp</a></span></dt> <dd><dl> <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> <dt><span class="section"><a href="high_level_components/boost_python_scope_hpp.html#high_level_components.boost_python_scope_hpp.class_scope">Class <code class="computeroutput"><span class="identifier">scope</span></code></a></span></dt> <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 scope constructors and destructor</a></span></dt> <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> </dl></dd> <dt><span class="section"><a href="high_level_components/boost_python_stl_iterator_hpp.html">boost/python/stl_iterator.hpp</a></span></dt> <dd><dl> <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> <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 template <code class="computeroutput"><span class="identifier">stl_input_iterator</span></code></a></span></dt> <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 template <code class="computeroutput"><span class="identifier">stl_input_iterator</span></code> constructors</a></span></dt> <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 template <code class="computeroutput"><span class="identifier">stl_input_iterator</span></code> modifiers</a></span></dt> <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 template <code class="computeroutput"><span class="identifier">stl_input_iterator</span></code> observers</a></span></dt> <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> </dl></dd> <dt><span class="section"><a href="high_level_components/boost_python_wrapper_hpp.html">boost/python/wrapper.hpp</a></span></dt> <dd><dl> <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> <dt><span class="section"><a href="high_level_components/boost_python_wrapper_hpp.html#high_level_components.boost_python_wrapper_hpp.class_override">Class <code class="computeroutput"><span class="identifier">override</span></code></a></span></dt> <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 <code class="computeroutput"><span class="identifier">override</span></code> observer functions</a></span></dt> <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 template <code class="computeroutput"><span class="identifier">wrapper</span></code></a></span></dt> <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 template <code class="computeroutput"><span class="identifier">wrapper</span></code> observer functions</a></span></dt> <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> </dl></dd> </dl> </div> <div class="section"> <div class="titlepage"><div><div><h2 class="title" style="clear: both"> <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> </h2></div></div></div> <div class="toc"><dl class="toc"> <dt><span class="section"><a href="high_level_components.html#high_level_components.boost_python_class_hpp.introduction">Introduction</a></span></dt> <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 <code class="computeroutput"><span class="identifier">class_</span><span class="special"><</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">></span></code></a></span></dt> <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<T1, T2, ...TN></a></span></dt> <dt><span class="section"><a href="high_level_components.html#high_level_components.boost_python_class_hpp.examples">Examples</a></span></dt> </dl></div> <div class="section"> <div class="titlepage"><div><div><h3 class="title"> <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> </h3></div></div></div> <p> <code class="computeroutput"><span class="special"><</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">></span></code> defines the interface through which users expose their C++ classes to Python. It declares the <code class="computeroutput"><span class="identifier">class_</span></code> class template, which is parameterized on the class type being exposed. It also exposes the <code class="computeroutput"><span class="identifier">init</span></code>, <code class="computeroutput"><span class="identifier">optional</span></code> and <code class="computeroutput"><span class="identifier">bases</span></code> utility class templates, which are used in conjunction with <code class="computeroutput"><span class="identifier">class_</span></code>. </p> <p> <code class="computeroutput"><span class="special"><</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">></span></code> contains a forward declaration of the <code class="computeroutput"><span class="identifier">class_</span></code> class template. </p> </div> <div class="section"> <div class="titlepage"><div><div><h3 class="title"> <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_<T, Bases, HeldType, NonCopyable>">Class template <code class="computeroutput"><span class="identifier">class_</span><span class="special"><</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">></span></code></a> </h3></div></div></div> <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_class_t_bases_hel.heldtype_semantics">HeldType Semantics</a></span></dt> <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 template <code class="computeroutput"><span class="identifier">class_</span></code> synopsis</a></span></dt> <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 template <code class="computeroutput"><span class="identifier">class_</span></code> constructors</a></span></dt> <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 template <code class="computeroutput"><span class="identifier">class_</span></code> modifier functions</a></span></dt> </dl></div> <p> Creates a Python class associated with the C++ type passed as its first parameter. Although it has four template parameters, only the first one 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 the argument from its type. </p> <div class="informaltable"><table class="table"> <colgroup> <col> <col> <col> <col> </colgroup> <thead><tr> <th> <p> Template Parameter </p> </th> <th> <p> Requirements </p> </th> <th> <p> Semantics </p> </th> <th> <p> Default </p> </th> </tr></thead> <tbody> <tr> <td> <p> <code class="computeroutput"><span class="identifier">T</span></code> </p> </td> <td> <p> A class type. </p> </td> <td> <p> The class being wrapped </p> </td> <td> </td> </tr> <tr> <td> <p> Bases </p> </td> <td> <p> 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<T1, T2, ...TN>">bases<...></a> which specifies previously-exposed C++ base classes of <code class="computeroutput"><span class="identifier">T</span></code>. </p> </td> <td> <p> Registers <code class="computeroutput"><span class="identifier">from_python</span></code> conversions from wrapped <code class="computeroutput"><span class="identifier">T</span></code> instances to each of its exposed direct and indirect bases. For each polymorphic base <code class="computeroutput"><span class="identifier">B</span></code>, 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>. </p> </td> <td> <p> <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<T1, T2, ...TN>">bases<></a> </p> </td> </tr> <tr> <td> <p> HeldType </p> </td> <td> <p> Must be <code class="computeroutput"><span class="identifier">T</span></code>, a class derived from <code class="computeroutput"><span class="identifier">T</span></code>, or a <a class="link" href="concepts/dereferenceable.html#concepts.dereferenceable.concept_requirements" title="Concept Requirements">Dereferenceable</a> type for which <code class="computeroutput"><span class="identifier">pointee</span><span class="special"><</span><span class="identifier">HeldType</span><span class="special">>::</span><span class="identifier">type</span></code> is <code class="computeroutput"><span class="identifier">T</span></code> or a class derived from <code class="computeroutput"><span class="identifier">T</span></code>. </p> </td> <td> <p> Specifies the type that is actually embedded in a Python object wrapping a <code class="computeroutput"><span class="identifier">T</span></code> instance when <code class="computeroutput"><span class="identifier">T</span></code>'s constructor is called or when a <code class="computeroutput"><span class="identifier">T</span></code> or <code class="computeroutput"><span class="identifier">T</span><span class="special">*</span></code> 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>, <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 <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>. More details below. </p> </td> <td> <p> <code class="computeroutput"><span class="identifier">T</span></code> </p> </td> </tr> <tr> <td> <p> NonCopyable </p> </td> <td> <p> If supplied, must be <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">noncopyable</span></code>. </p> </td> <td> <p> Suppresses automatic registration of <code class="computeroutput"><span class="identifier">to_python</span></code> conversions which copy <code class="computeroutput"><span class="identifier">T</span></code> instances. Required when <code class="computeroutput"><span class="identifier">T</span></code> has no publicly-accessible copy constructor. </p> </td> <td> <p> An unspecified type other than boost::noncopyable. </p> </td> </tr> </tbody> </table></div> <div class="section"> <div class="titlepage"><div><div><h4 class="title"> <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 Semantics</a> </h4></div></div></div> <div class="orderedlist"><ol class="orderedlist" type="1"> <li class="listitem"> If HeldType is derived from <code class="computeroutput"><span class="identifier">T</span></code>, 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 Python object that contains the HeldType instance, as shown in this 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> 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>, below, nor is it passed explicitly by users when Python instances of <code class="computeroutput"><span class="identifier">T</span></code> are created. This idiom allows C++ virtual functions which will be overridden in Python to access the Python object so the Python method can be invoked. Boost.Python automatically registers additional converters which allow wrapped instances of <code class="computeroutput"><span class="identifier">T</span></code> to be passed to wrapped C++ functions expecting HeldType arguments. </li> <li class="listitem"> 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 arguments, specifying a smart pointer for HeldType allows users to pass Python <code class="computeroutput"><span class="identifier">T</span></code> instances 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"><></span></code> or <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">shared_ptr</span><span class="special"><></span></code> which contain a nested type <code class="computeroutput"><span class="identifier">element_type</span></code> designating the referent type are automatically supported; additional smart pointer types can be supported by specializing <code class="computeroutput"><span class="identifier">pointee</span><span class="special"><</span><span class="identifier">HeldType</span><span class="special">></span></code>. </li> <li class="listitem"> As in case 1 above, when HeldType is a smart pointer to a class derived from <code class="computeroutput"><span class="identifier">T</span></code>, the initial <code class="computeroutput"><span class="identifier">PyObject</span><span class="special">*</span></code> argument must be supplied by all of HeldType's exposed constructors. </li> <li class="listitem"> Except in cases 1 and 3, users may optionally specify that T itself 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<T></a>. </li> </ol></div> </div> <div class="section"> <div class="titlepage"><div><div><h4 class="title"> <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 template <code class="computeroutput"><span class="identifier">class_</span></code> synopsis</a> </h4></div></div></div> <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> <span class="special">{</span> <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span> <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"><></span> <span class="special">,</span> <span class="keyword">class</span> <span class="identifier">HeldType</span> <span class="special">=</span> <span class="identifier">T</span> <span class="special">,</span> <span class="keyword">class</span> <span class="identifier">NonCopyable</span> <span class="special">=</span> <span class="identifier">unspecified</span> <span class="special">></span> <span class="keyword">class</span> <span class="identifier">class_</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">object</span> <span class="special">{</span> <span class="comment">// Constructors with default __init__</span> <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">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="comment">// Constructors, specifying non-default __init__</span> <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Init</span><span class="special">></span> <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> <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Init</span><span class="special">></span> <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> <span class="comment">// Exposing additional __init__ functions</span> <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Init</span><span class="special">></span> <span class="identifier">class_</span><span class="special">&</span> <span class="identifier">def</span><span class="special">(</span><span class="identifier">Init</span><span class="special">);</span> <span class="comment">// defining methods</span> <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">></span> <span class="identifier">class_</span><span class="special">&</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> <span class="keyword">template</span> <span class="special"><</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="identifier">class_</span><span class="special">&</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">&);</span> <span class="keyword">template</span> <span class="special"><</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="identifier">class_</span><span class="special">&</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">&,</span> <span class="identifier">A2</span> <span class="keyword">const</span><span class="special">&);</span> <span class="keyword">template</span> <span class="special"><</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">></span> <span class="identifier">class_</span><span class="special">&</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">&,</span> <span class="identifier">A2</span> <span class="keyword">const</span><span class="special">&,</span> <span class="identifier">A3</span> <span class="keyword">const</span><span class="special">&);</span> <span class="comment">// declaring method as static</span> <span class="identifier">class_</span><span class="special">&</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> <span class="comment">// exposing operators</span> <span class="keyword">template</span> <span class="special"><</span><span class="identifier">unspecified</span><span class="special">></span> <span class="identifier">class_</span><span class="special">&</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"><</span><span class="identifier">unspecified</span><span class="special">>);</span> <span class="comment">// Raw attribute modification</span> <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="identifier">class_</span><span class="special">&</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">&);</span> <span class="comment">// exposing data members</span> <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">></span> <span class="identifier">class_</span><span class="special">&</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">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">></span> <span class="identifier">class_</span><span class="special">&</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="comment">// exposing static data members</span> <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">></span> <span class="identifier">class_</span><span class="special">&</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">&</span> <span class="identifier">d</span><span class="special">);</span> <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">></span> <span class="identifier">class_</span><span class="special">&</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">&</span> <span class="identifier">d</span><span class="special">);</span> <span class="comment">// property creation</span> <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Get</span><span class="special">></span> <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">&</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> <span class="keyword">template</span> <span class="special"><</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">></span> <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">&</span> <span class="identifier">fget</span><span class="special">,</span> <span class="identifier">Set</span> <span class="keyword">const</span><span class="special">&</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> <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Get</span><span class="special">></span> <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">&</span> <span class="identifier">fget</span><span class="special">);</span> <span class="keyword">template</span> <span class="special"><</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">></span> <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">&</span> <span class="identifier">fget</span><span class="special">,</span> <span class="identifier">Set</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">fset</span><span class="special">);</span> <span class="comment">// pickle support</span> <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">PickleSuite</span><span class="special">></span> <span class="identifier">self</span><span class="special">&</span> <span class="identifier">def_pickle</span><span class="special">(</span><span class="identifier">PickleSuite</span> <span class="keyword">const</span><span class="special">&);</span> <span class="identifier">self</span><span class="special">&</span> <span class="identifier">enable_pickling</span><span class="special">();</span> <span class="special">};</span> <span class="special">}}</span> </pre> </div> <div class="section"> <div class="titlepage"><div><div><h4 class="title"> <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 template <code class="computeroutput"><span class="identifier">class_</span></code> constructors</a> </h4></div></div></div> <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> <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="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Init</span><span class="special">></span> <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> <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Init</span><span class="special">></span> <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> </pre> <div class="variablelist"> <p class="title"><b></b></p> <dl class="variablelist"> <dt><span class="term">Requires</span></dt> <dd><p> name is an <a class="link" href="glossary.html#ntbs">ntbs</a> which conforms to Python's <a href="http://www.python.org/doc/current/ref/identifiers.html" target="_top">identifier naming rules</a>. If docstring is supplied, it must be an <a class="link" href="glossary.html#ntbs">ntbs</a>. If <code class="computeroutput"><span class="identifier">init_spec</span></code> is supplied, it must be either the special enumeration constant <code class="computeroutput"><span class="identifier">no_init</span></code> or 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> compatible with <code class="computeroutput"><span class="identifier">T</span></code>. </p></dd> <dt><span class="term">Effects</span></dt> <dd> <p> Constructs a <code class="computeroutput"><span class="identifier">class_</span></code> object holding a Boost.Python extension class named name. The named 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 scope</a> is bound to the new extension class. </p> <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> <li class="listitem"> If supplied, the value of docstring is bound to the <code class="computeroutput"><span class="identifier">__doc__</span></code> attribute of the extension class. </li> <li class="listitem"> If <code class="computeroutput"><span class="identifier">init_spec</span></code> is <code class="computeroutput"><span class="identifier">no_init</span></code>, a special <code class="computeroutput"><span class="identifier">__init__</span></code> function is generated which always raises a Python exception. Otherwise, <code class="computeroutput"><span class="keyword">this</span><span class="special">-></span><span class="identifier">def</span><span class="special">(</span><span class="identifier">init_spec</span><span class="special">)</span></code> is called. </li> <li class="listitem"> If <code class="computeroutput"><span class="identifier">init_spec</span></code> is not supplied, <code class="computeroutput"><span class="keyword">this</span><span class="special">-></span><span class="identifier">def</span><span class="special">(</span><span class="identifier">init</span><span class="special"><>())</span></code> is called. </li> </ul></div> </dd> <dt><span class="term">Rationale</span></dt> <dd><p> Allowing the user to specify constructor arguments in the <code class="computeroutput"><span class="identifier">class_</span><span class="special"><></span></code> constructor helps her to avoid the common run-time errors which result from invoking wrapped member functions without having exposed an <code class="computeroutput"><span class="identifier">__init__</span></code> function which creates the requisite <code class="computeroutput"><span class="identifier">T</span></code> instance. Types which are not default-constructible will cause a compile-time error unless <code class="computeroutput"><span class="identifier">Init</span></code> is supplied. The user must always supply name as there is currently no portable method to derive the text of the class name from its type. </p></dd> </dl> </div> </div> <div class="section"> <div class="titlepage"><div><div><h4 class="title"> <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 template <code class="computeroutput"><span class="identifier">class_</span></code> modifier functions</a> </h4></div></div></div> <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Init</span><span class="special">></span> <span class="identifier">class_</span><span class="special">&</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> </pre> <div class="variablelist"> <p class="title"><b></b></p> <dl class="variablelist"> <dt><span class="term">Requires</span></dt> <dd><p> <code class="computeroutput"><span class="identifier">init_expr</span></code> is the 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> compatible with <code class="computeroutput"><span class="identifier">T</span></code>. </p></dd> <dt><span class="term">Effects</span></dt> <dd><p> 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 prefix</a> <code class="computeroutput"><span class="identifier">P</span></code> of <code class="computeroutput"><span class="identifier">Init</span></code>, adds an <code class="computeroutput"><span class="identifier">__init__</span><span class="special">(...)</span></code> function overload to the extension class accepting P as arguments. Each overload generated constructs an object of HeldType according to the semantics described above, using a copy of init_expr's call 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 prefix</a> of Init contains N types and init_expr holds M keywords, an initial sequence of the keywords are used for all but the first N - M arguments of each overload. </p></dd> <dt><span class="term">Returns</span></dt> <dd><p> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> </p></dd> <dt><span class="term">Rationale</span></dt> <dd><p> Allows users to easily expose a class' constructor to Python. </p></dd> </dl> </div> <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">></span> <span class="identifier">class_</span><span class="special">&</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="keyword">template</span> <span class="special"><</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="identifier">class_</span><span class="special">&</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">&</span> <span class="identifier">a1</span><span class="special">);</span> <span class="keyword">template</span> <span class="special"><</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="identifier">class_</span><span class="special">&</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">&</span> <span class="identifier">a1</span><span class="special">,</span> <span class="identifier">A2</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">a2</span><span class="special">);</span> <span class="keyword">template</span> <span class="special"><</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">></span> <span class="identifier">class_</span><span class="special">&</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">&</span> <span class="identifier">a1</span><span class="special">,</span> <span class="identifier">A2</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">a2</span><span class="special">,</span> <span class="identifier">A3</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">a3</span><span class="special">);</span> </pre> <div class="variablelist"> <p class="title"><b></b></p> <dl class="variablelist"> <dt><span class="term">Requires</span></dt> <dd> <p> name is an <a class="link" href="glossary.html#ntbs">ntbs</a> which conforms to Python's <a href="http://www.python.org/doc/current/ref/identifiers.html" target="_top">identifier 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>, only the second form is allowed and fn must be a pointer to function or pointer to member function whose <a class="link" href="glossary.html#arity">arity</a> 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 arity</a>. </p> <p> <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 sequence of argument types, beginning with the one whose length 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 arity</a>, adds a <code class="computeroutput"><span class="identifier">name</span><span class="special">(...)</span></code> method overload to the extension class. Each overload generated invokes a1's call-expression with <code class="computeroutput"><span class="identifier">P</span></code>, using a copy 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> types and a1 holds <code class="computeroutput"><span class="identifier">M</span></code> keywords, an initial sequence of the keywords are used for all but the first <code class="computeroutput"><span class="identifier">N</span> <span class="special">-</span> <span class="identifier">M</span></code> arguments of each overload. </p> <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> Otherwise, a single method overload is built around fn, which must not be null: <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "> <li class="listitem"> If fn is a function pointer, its first argument must be of the form U, U cv&, U cv*, or U cv* const&, where T* is convertible to U*, and a1-a3, if supplied, may be selected in any order from the table below. </li> <li class="listitem"> Otherwise, if fn is a member function pointer, its target must be T or one of its public base classes, and a1-a3, if supplied, may be selected in any order from the table below. </li> <li class="listitem"> <p class="simpara"> 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>, and a1-a2, if supplied, may be selcted in any order from the first two rows of the table below. To be useful, fn should be <a href="http://www.python.org/doc/current/lib/built-in-funcs.html#l2h-6" target="_top">callable</a>. </p> <div class="informaltable"><table class="table"> <colgroup> <col> <col> <col> </colgroup> <thead><tr> <th> <p> Mnemonic Name </p> </th> <th> <p> Requirements/Type properties </p> </th> <th> <p> Effects </p> </th> </tr></thead> <tbody> <tr> <td> <p> docstring </p> </td> <td> <p> Any <a class="link" href="glossary.html#ntbs">ntbs</a> </p> </td> <td> <p> Value will be bound to the __doc__ attribute of the resulting method overload. If an earlier overload supplied a docstring, two newline characters and the new docstring are appended to it. </p> </td> </tr> <tr> <td> <p> policies </p> </td> <td> <p> A model of <a class="link" href="concepts.html#concepts.callpolicies" title="CallPolicies">CallPolicies</a> </p> </td> <td> <p> A copy will be used as the call policies of the resulting method overload. </p> </td> </tr> <tr> <td> <p> keywords </p> </td> <td> <p> 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> specifying no more arguments than the <a class="link" href="glossary.html#arity">arity</a> of fn. </p> </td> <td> <p> A copy will be used as the call policies of the resulting method overload. </p> </td> </tr> </tbody> </table></div> </li> </ul></div> </li></ul></div> </dd> <dt><span class="term">Returns</span></dt> <dd><p> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> </p></dd> </dl> </div> <pre class="programlisting"><span class="identifier">class_</span><span class="special">&</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> <div class="variablelist"> <p class="title"><b></b></p> <dl class="variablelist"> <dt><span class="term">Requires</span></dt> <dd><p> name is an <a class="link" href="glossary.html#ntbs">ntbs</a> which conforms to Python's <a href="http://www.python.org/doc/current/ref/identifiers.html" target="_top">identifier naming rules</a>, and corresponds to a method whose overloads have all been defined. </p></dd> <dt><span class="term">Effects</span></dt> <dd><p> Replaces the existing named attribute <code class="computeroutput"><span class="identifier">x</span></code> 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 corresponding method is static and therefore no object instance will be passed to it. This is equivalent to the Python statement: </p></dd> </dl> </div> <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> <div class="variablelist"> <p class="title"><b></b></p> <dl class="variablelist"> <dt><span class="term">Note</span></dt> <dd><p> Attempting to invoke def(name,...) after invoking staticmethod(name) will <a class="link" href="glossary.html#raise">raise</a> a RuntimeError. </p></dd> <dt><span class="term">Returns</span></dt> <dd><p> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> </p></dd> </dl> </div> <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="identifier">unspecified</span><span class="special">></span> <span class="identifier">class_</span><span class="special">&</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"><</span><span class="identifier">unspecified</span><span class="special">>);</span> </pre> <div class="variablelist"> <p class="title"><b></b></p> <dl class="variablelist"> <dt><span class="term">Effects</span></dt> <dd><p> Adds a Python <a href="http://www.python.org/doc/ref/specialnames.html" target="_top">special method</a> as described <a class="link" href="high_level_components/boost_python_operators_hpp.html" title="boost/python/operators.hpp">here</a>. </p></dd> <dt><span class="term">Returns</span></dt> <dd><p> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> </p></dd> </dl> </div> <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="identifier">class_</span><span class="special">&</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">&</span> <span class="identifier">u</span><span class="special">);</span> </pre> <div class="variablelist"> <p class="title"><b></b></p> <dl class="variablelist"> <dt><span class="term">Requires</span></dt> <dd><p> name is an <a class="link" href="glossary.html#ntbs">ntbs</a> which conforms to Python's <a href="http://www.python.org/doc/current/ref/identifiers.html" target="_top">identifier naming rules</a>. </p></dd> <dt><span class="term">Effects</span></dt> <dd> <p> Converts <code class="computeroutput"><span class="identifier">u</span></code> to Python and adds it to the attribute dictionary of the extension class: </p> <pre class="programlisting"><span class="identifier">PyObject_SetAttrString</span><span class="special">(</span><span class="keyword">this</span><span class="special">-></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> </dd> <dt><span class="term">Returns</span></dt> <dd><p> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> </p></dd> </dl> </div> <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Get</span><span class="special">></span> <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">&</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> <span class="keyword">template</span> <span class="special"><</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">></span> <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">&</span> <span class="identifier">fget</span><span class="special">,</span> <span class="identifier">Set</span> <span class="keyword">const</span><span class="special">&</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> </pre> <div class="variablelist"> <p class="title"><b></b></p> <dl class="variablelist"> <dt><span class="term">Requires</span></dt> <dd><p> name is an <a class="link" href="glossary.html#ntbs">ntbs</a> which conform to Python's <a href="http://www.python.org/doc/current/ref/identifiers.html" target="_top">identifier naming rules</a>. </p></dd> <dt><span class="term">Effects</span></dt> <dd><p> Creates a new Python <a href="http://www.python.org/2.2.2/descrintro.html#property" target="_top">property</a> 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) docstring <code class="computeroutput"><span class="identifier">doc</span></code> to its constructor, then adds that property to the Python class object under construction with the given attribute name. </p></dd> <dt><span class="term">Returns</span></dt> <dd><p> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> </p></dd> <dt><span class="term">Rationale</span></dt> <dd><p> Allows users to easily expose functions that can be invoked from Python with attribute access syntax. </p></dd> </dl> </div> <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Get</span><span class="special">></span> <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">&</span> <span class="identifier">fget</span><span class="special">);</span> <span class="keyword">template</span> <span class="special"><</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">></span> <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">&</span> <span class="identifier">fget</span><span class="special">,</span> <span class="identifier">Set</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">fset</span><span class="special">);</span> </pre> <div class="variablelist"> <p class="title"><b></b></p> <dl class="variablelist"> <dt><span class="term">Requires</span></dt> <dd><p> name is an <a class="link" href="glossary.html#ntbs">ntbs</a> which conforms to Python's <a href="http://www.python.org/doc/current/ref/identifiers.html" target="_top">identifier naming rules</a>. </p></dd> <dt><span class="term">Effects</span></dt> <dd><p> 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> (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) to its constructor, then adds that property to the Python class under construction with the given attribute name. StaticProperty is a special subclass of Python's property class which can be called without an initial self argument. </p></dd> <dt><span class="term">Returns</span></dt> <dd><p> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> </p></dd> <dt><span class="term">Rationale</span></dt> <dd><p> Allows users to easily expose functions that can be invoked from Python with static attribute access syntax. </p></dd> </dl> </div> <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">></span> <span class="identifier">class_</span><span class="special">&</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> <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">></span> <span class="identifier">class_</span><span class="special">&</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">&</span> <span class="identifier">d</span><span class="special">);</span> </pre> <div class="variablelist"> <p class="title"><b></b></p> <dl class="variablelist"> <dt><span class="term">Requires</span></dt> <dd><p> name is an <a class="link" href="glossary.html#ntbs">ntbs</a> which conforms to Python's <a href="http://www.python.org/doc/current/ref/identifiers.html" target="_top">identifier naming rules</a>. <code class="computeroutput"><span class="identifier">doc</span></code> is also an <a class="link" href="glossary.html#ntbs">ntbs</a>. </p></dd> <dt><span class="term">Effects</span></dt> <dd> <pre class="programlisting"><span class="keyword">this</span><span class="special">-></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> <p> and </p> <pre class="programlisting"><span class="keyword">this</span><span class="special">-></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> <p> respectively. </p> </dd> <dt><span class="term">Returns</span></dt> <dd><p> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> </p></dd> <dt><span class="term">Rationale</span></dt> <dd><p> Allows users to easily expose a class' data member or free variable such that it can be inspected from Python with a natural syntax. </p></dd> </dl> </div> <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">></span> <span class="identifier">class_</span><span class="special">&</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> <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">></span> <span class="identifier">class_</span><span class="special">&</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">&</span> <span class="identifier">d</span><span class="special">);</span> </pre> <div class="variablelist"> <p class="title"><b></b></p> <dl class="variablelist"> <dt><span class="term">Effects</span></dt> <dd> <pre class="programlisting"><span class="keyword">this</span><span class="special">-></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> <p> and </p> <pre class="programlisting"><span class="keyword">this</span><span class="special">-></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> <p> respectively. </p> </dd> <dt><span class="term">Returns</span></dt> <dd><p> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> </p></dd> <dt><span class="term">Rationale</span></dt> <dd><p> Allows users to easily expose a class' data or free variable member such that it can be inspected and set from Python with a natural syntax. </p></dd> </dl> </div> <pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">PickleSuite</span><span class="special">></span> <span class="identifier">class_</span><span class="special">&</span> <span class="identifier">def_pickle</span><span class="special">(</span><span class="identifier">PickleSuite</span> <span class="keyword">const</span><span class="special">&);</span> </pre> <div class="variablelist"> <p class="title"><b></b></p> <dl class="variablelist"> <dt><span class="term">Requires</span></dt> <dd><p> 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>. </p></dd> <dt><span class="term">Effects</span></dt> <dd><p> Defines a legal combination of the special attributes and methods: __getinitargs__, __getstate__, __setstate__, __getstate_manages_dict__, __safe_for_unpickling__, __reduce__ </p></dd> <dt><span class="term">Returns</span></dt> <dd><p> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> </p></dd> <dt><span class="term">Rationale</span></dt> <dd><p> Provides an <a class="link" href="topics/pickle_support.html#topics.pickle_support.the_pickle_interface" title="The Pickle Interface">easy 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> for the wrapped class. The user is protected by compile-time consistency checks. </p></dd> </dl> </div> <pre class="programlisting"><span class="identifier">class_</span><span class="special">&</span> <span class="identifier">enable_pickling</span><span class="special">();</span></pre> <div class="variablelist"> <p class="title"><b></b></p> <dl class="variablelist"> <dt><span class="term">Effects</span></dt> <dd><p> Defines the __reduce__ method and the __safe_for_unpickling__ attribute. </p></dd> <dt><span class="term">Returns</span></dt> <dd><p> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> </p></dd> <dt><span class="term">Rationale</span></dt> <dd><p> Light-weight alternative to def_pickle(). Enables implementation of pickle support from Python. </p></dd> </dl> </div> </div> </div> <div class="section"> <div class="titlepage"><div><div><h3 class="title"> <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<T1, T2, ...TN>">Class template bases<T1, T2, ...TN></a> </h3></div></div></div> <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 template bases synopsis</a></span></dt></dl></div> <p> An MPL sequence which can be used in class_<...> instantiations indicate a list of base classes. </p> <div class="section"> <div class="titlepage"><div><div><h4 class="title"> <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 template bases synopsis</a> </h4></div></div></div> <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> <span class="special">{</span> <span class="keyword">template</span> <span class="special"><</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">></span> <span class="keyword">struct</span> <span class="identifier">bases</span> <span class="special">{};</span> <span class="special">}}</span> </pre> </div> </div> <div class="section"> <div class="titlepage"><div><div><h3 class="title"> <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> </h3></div></div></div> <p> Given a C++ class declaration: </p> <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> <span class="special">{</span> <span class="keyword">public</span><span class="special">:</span> <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> <span class="identifier">Foo</span><span class="special">(</span><span class="keyword">double</span><span class="special">);</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="keyword">const</span><span class="special">&</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> <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> <span class="keyword">double</span> <span class="identifier">value</span><span class="special">;</span> <span class="comment">// public data</span> <span class="keyword">private</span><span class="special">:</span> <span class="special">...</span> <span class="special">};</span> </pre> <p> A corresponding Boost.Python extension class can be created with: </p> <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> <span class="identifier">class_</span><span class="special"><</span><span class="identifier">Foo</span><span class="special">,</span><span class="identifier">bases</span><span class="special"><</span><span class="identifier">Bar</span><span class="special">,</span><span class="identifier">Baz</span><span class="special">></span> <span class="special">>(</span><span class="string">"Foo"</span><span class="special">,</span> <span class="string">"This is Foo's docstring."</span> <span class="string">"It describes our Foo extension class"</span><span class="special">,</span> <span class="identifier">init</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*>(</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> <span class="special">)</span> <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">init</span><span class="special"><</span><span class="keyword">double</span><span class="special">>())</span> <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">&</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"><>())</span> <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">&</span><span class="identifier">Foo</span><span class="special">::</span><span class="identifier">set_name</span><span class="special">)</span> <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">&</span><span class="identifier">Foo</span><span class="special">::</span><span class="identifier">value</span><span class="special">);</span> </pre> </div> </div> </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"></td> <td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2015 David Abrahams, Stefan Seefeld<p> Distributed under the Boost Software License, Version 1.0. (See accompanying 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> </p> </div></td> </tr></table> <hr> <div class="spirit-nav"> <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> </div> </body> </html>