blob: 783e8e5db1282116848b0c849381216fe26f669e [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Windows (vers 1st August 2002), see www.w3.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../boost.css">
<title>Boost.Python - &lt;boost/python/overloads.hpp&gt;</title>
</head>
<body>
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
"header">
<tr>
<td valign="top" width="300">
<h3><a href="../../../../index.htm"><img height="86" width="277"
alt="C++ Boost" src="../../../../boost.png" border="0"></a></h3>
</td>
<td valign="top">
<h1 align="center"><a href="../index.html">Boost.Python</a></h1>
<h2 align="center">Header &lt;boost/python/overloads.hpp&gt;</h2>
</td>
</tr>
</table>
<hr>
<h2>Contents</h2>
<dl class="page-index">
<dt><a href="#introduction">Introduction</a></dt>
<dt><a href=
"#overload-dispatch-expression"><i>overload-dispatch-expressions</i></a></dt>
<dt><a href= "#OverloadDispatcher-concept">OverloadDispatcher</a> concept</dt>
<dt><a href="#macros">Macros</a></dt>
<dd>
<dl class="page-index">
<dt><a href=
"#BOOST_PYTHON_FUNCTION_OVERLOADS-spec">BOOST_PYTHON_FUNCTION_OVERLOADS</a></dt>
<dt><a href=
"#BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS-spec">BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS</a></dt>
</dl>
</dd>
<dt><a href="#examples">Example(s)</a></dt>
</dl>
<hr>
<h2><a name="introduction"></a>Introduction</h2>
<p>Defines facilities for generating families of overloaded Python
functions and extension class methods from C++ functions and
member functions with default arguments, or from similar families
of C++ overloads</p>
<h2><a name=
"overload-dispatch-expression"></a><i>overload-dispatch-expressions</i></h2>
<p>
An <em>overload-dispatch-expression</em> is used to describe a
family of overloaded methods to be generated for an extension
class. It has the following properties:
<blockquote>
<dl class="properties">
<dt><b>docstring:</b> An <a href="definitions.html#ntbs">ntbs</a>
whose value will bound to the methods' <code>__doc__</code>
attribute</dt>
<dt><b>keywords:</b> A <a href=
"args.html#keyword-expression">keyword-expression</a> which
will be used to name (a trailing subsequence of) the arguments
to the generated methods.</dt>
<dt><b>call policies:</b> An instance of some type which models <a href=
"CallPolicies.html">CallPolicies</a>.</dt>
<dt><b>minimum <a href="definitions.html#arity">arity</a></b>
The minimum number of arguments to be accepted by a generated
method overload.</dt>
<dt><b>maximum <a href="definitions.html#arity">arity</a></b>
The maximum number of arguments to be accepted by a generated
method overload.</dt>
</dl>
</blockquote>
<h2><a name="OverloadDispatcher-concept"></a>OverloadDispatcher Concept</h2>
An OverloadDispatcher <code>X</code> is a class which has a
<em>minimum arity</em> and a <em>maximum arity</em>, and for which
the following following are valid <a
href="#overload-dispatch-expression"><em>overload-dispatch-expression</em></a>s,
with the same minimum and maximum arity as the OverloadDispatcher.
<pre>
X()
X(docstring)
X(docstring, keywords)
X(keywords, docstring)
X()[policies]
X(docstring)[policies]
X(docstring, keywords)[policies]
X(keywords, docstring)[policies]
</pre>
<ul>
<li>If <code>policies</code> are supplied, it must be an instance of a
type which models <a
href="CallPolicies.html#CallPolicies-concept">CallPolicies</a>, and
will be used as the result's call policies. Otherwise the result's
call policies will be an instance of <a
href="default_call_policies.html#default_call_policies-spec">default_call_policies</a>.
<li>If <code>docstring</code> is supplied it must be an <a
href="definitions.html#ntbs">ntbs</a>, and will be used as the result's docstring. Otherwise the result has an empty docstring.
<li>If <code>keywords</code> is supplied it must be the result of a <a
href= "args.html#keyword-expression">keyword-expression</a>
whose length is no greater than <code>X</code>'s maximum
arity, and will be used as the result's keywords. Otherwise
the result's keywords will be empty.
</ul>
<h2><a name="macros"></a>Macros</h2>
<h3><a name=
"BOOST_PYTHON_FUNCTION_OVERLOADS-spec">BOOST_PYTHON_FUNCTION_OVERLOADS(name,&nbsp;func_id,&nbsp;min_args,&nbsp;max_args)</a></h3>
Expands to the definition of an OverloadDispatcher called
<code>name</code> in the current scope which can be used to
generate the following function invocation:
<pre>
func_id(a<small><i>1</i></small>, a<small><i>2</i></small>,...a<small><i>i</i></small>);
</pre>
for all <code>min_args</code> &lt;= <i>i</i> &lt;= <code>max_args</code>.
<h3><a name=
"BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS-spec">BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(name,&nbsp;member_name,&nbsp;min_args,&nbsp;max_args)</a></h3>
Expands to the definition of an OverloadDispatcher called
<code>name</code> in the current scope which can be used to
generate the following function invocation:
<pre>
x.member_name(a<small><i>1</i></small>, a<small><i>2</i></small>,...a<small><i>i</i></small>);
</pre>
for all <code>min_args</code> &lt;= <i>i</i> &lt;=
<code>max_args</code>, where <code>x</code> is a reference to an
object of class type.
<h2><a name="examples"></a>Example(s)</h2>
<pre>
#include &lt;boost/python/module.hpp&gt;
#include &lt;boost/python/def.hpp&gt;
#include &lt;boost/python/args.hpp&gt;
#include &lt;boost/python/tuple.hpp&gt;
#include &lt;boost/python/class.hpp&gt;
#include &lt;boost/python/overloads.hpp&gt;
#include &lt;boost/python/return_internal_reference.hpp&gt;
using namespace boost::python;
tuple f(int x = 1, double y = 4.25, char const* z = &quot;wow&quot;)
{
return make_tuple(x, y, z);
}
BOOST_PYTHON_FUNCTION_OVERLOADS(f_overloads, f, 0, 3)
struct Y {};
struct X
{
Y&amp; f(int x, double y = 4.25, char const* z = &quot;wow&quot;)
{
return inner;
}
Y inner;
};
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(f_member_overloads, f, 1, 3)
BOOST_PYTHON_MODULE(args_ext)
{
def(&quot;f&quot;, f,
f_overloads(
args(&quot;x&quot;, &quot;y&quot;, &quot;z&quot;), &quot;This is f's docstring&quot;
));
class_&lt;Y&gt;(&quot;Y&quot;)
;
class_&lt;X&gt;(&quot;X&quot;, &quot;This is X's docstring&quot;)
.def(&quot;f1&quot;, &amp;X::f,
f_member_overloads(
args(&quot;x&quot;, &quot;y&quot;, &quot;z&quot;), &quot;f's docstring&quot;
)[return_internal_reference&lt;&gt;()]
)
;
}
</pre>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
15 April, 2003
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
</p>
<p><i>&copy; Copyright <a href=
"http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a> 2002.</i></p>
</body>
</html>