mirror of
https://github.com/boostorg/python.git
synced 2026-01-22 05:22:45 +00:00
96 lines
5.6 KiB
HTML
96 lines
5.6 KiB
HTML
<html>
|
|
<head>
|
|
<!-- Generated by the Spirit (http://spirit.sf.net) QuickDoc -->
|
|
<title>Enums</title>
|
|
<link rel="stylesheet" href="theme/style.css" type="text/css">
|
|
<link rel="prev" href="extracting_c___objects.html">
|
|
<link rel="next" href="embedding.html">
|
|
</head>
|
|
<body>
|
|
<table width="100%" height="48" border="0" cellspacing="2">
|
|
<tr>
|
|
<td><img src="theme/c%2B%2Bboost.gif">
|
|
</td>
|
|
<td width="85%">
|
|
<font size="6" face="Verdana, Arial, Helvetica, sans-serif"><b>Enums</b></font>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<br>
|
|
<table border="0">
|
|
<tr>
|
|
<td width="30"><a href="../index.html"><img src="theme/u_arr.gif" border="0"></a></td>
|
|
<td width="30"><a href="extracting_c___objects.html"><img src="theme/l_arr.gif" border="0"></a></td>
|
|
<td width="20"><a href="embedding.html"><img src="theme/r_arr.gif" border="0"></a></td>
|
|
</tr>
|
|
</table>
|
|
<p>
|
|
Boost.Python has a nifty facility to capture and wrap C++ enums. While
|
|
Python has no <tt>enum</tt> type, we'll often want to expose our C++ enums to
|
|
Python as an <tt>int</tt>. Boost.Python's enum facility makes this easy while
|
|
taking care of the proper conversions from Python's dynamic typing to C++'s
|
|
strong static typing (in C++, ints cannot be implicitly converted to
|
|
enums). To illustrate, given a C++ enum:</p>
|
|
<code><pre>
|
|
<span class=keyword>enum </span><span class=identifier>choice </span><span class=special>{ </span><span class=identifier>red</span><span class=special>, </span><span class=identifier>blue </span><span class=special>};
|
|
</span></pre></code>
|
|
<p>
|
|
the construct:</p>
|
|
<code><pre>
|
|
<span class=identifier>enum_</span><span class=special><</span><span class=identifier>choice</span><span class=special>>(</span><span class=string>"choice"</span><span class=special>)
|
|
.</span><span class=identifier>value</span><span class=special>(</span><span class=string>"red"</span><span class=special>, </span><span class=identifier>red</span><span class=special>)
|
|
.</span><span class=identifier>value</span><span class=special>(</span><span class=string>"blue"</span><span class=special>, </span><span class=identifier>blue</span><span class=special>)
|
|
;
|
|
</span></pre></code>
|
|
<p>
|
|
can be used to expose to Python. The new enum type is created in the
|
|
current <tt>scope()</tt>, which is usually the current module. The snippet above
|
|
creates a Python class derived from Python's <tt>int</tt> type which is
|
|
associated with the C++ type passed as its first parameter.</p>
|
|
<table width="80%" border="0" align="center">
|
|
<tr>
|
|
<td class="note_box">
|
|
<img src="theme/lens.gif"></img> <b>what is a scope?</b><br><br> The scope is a class that has an
|
|
associated global Python object which controls the Python namespace in
|
|
which new extension classes and wrapped functions will be defined as
|
|
attributes. Details can be found <a href="../../v2/scope.html">
|
|
here</a>. </td>
|
|
</tr>
|
|
</table>
|
|
<p>
|
|
You can access those values in Python as</p>
|
|
<code><pre>
|
|
<span class=special>>>> </span><span class=identifier>my_module</span><span class=special>.</span><span class=identifier>choice</span><span class=special>.</span><span class=identifier>red
|
|
</span><span class=identifier>my_module</span><span class=special>.</span><span class=identifier>choice</span><span class=special>.</span><span class=identifier>red
|
|
</span></pre></code>
|
|
<p>
|
|
where my_module is the module where the enum is declared. You can also
|
|
create a new scope around a class:</p>
|
|
<code><pre>
|
|
<span class=identifier>scope </span><span class=identifier>in_X </span><span class=special>= </span><span class=identifier>class_</span><span class=special><</span><span class=identifier>X</span><span class=special>>(</span><span class=string>"X"</span><span class=special>)
|
|
.</span><span class=identifier>def</span><span class=special>( ... )
|
|
.</span><span class=identifier>def</span><span class=special>( ... )
|
|
;
|
|
|
|
// </span><span class=identifier>Expose </span><span class=identifier>X</span><span class=special>::</span><span class=identifier>nested </span><span class=identifier>as </span><span class=identifier>X</span><span class=special>.</span><span class=identifier>nested
|
|
</span><span class=identifier>enum_</span><span class=special><</span><span class=identifier>X</span><span class=special>::</span><span class=identifier>nested</span><span class=special>>(</span><span class=string>"nested"</span><span class=special>)
|
|
.</span><span class=identifier>value</span><span class=special>(</span><span class=string>"red"</span><span class=special>, </span><span class=identifier>red</span><span class=special>)
|
|
.</span><span class=identifier>value</span><span class=special>(</span><span class=string>"blue"</span><span class=special>, </span><span class=identifier>blue</span><span class=special>)
|
|
;
|
|
</span></pre></code>
|
|
<table border="0">
|
|
<tr>
|
|
<td width="30"><a href="../index.html"><img src="theme/u_arr.gif" border="0"></a></td>
|
|
<td width="30"><a href="extracting_c___objects.html"><img src="theme/l_arr.gif" border="0"></a></td>
|
|
<td width="20"><a href="embedding.html"><img src="theme/r_arr.gif" border="0"></a></td>
|
|
</tr>
|
|
</table>
|
|
<br>
|
|
<hr size="1"><p class="copyright">Copyright © 2002-2003 David Abrahams<br>Copyright © 2002-2003 Joel de Guzman<br><br>
|
|
<font size="2">Permission to copy, use, modify, sell and distribute this document
|
|
is granted provided this copyright notice appears in all copies. This document
|
|
is provided "as is" without express or implied warranty, and with
|
|
no claim as to its suitability for any purpose. </font> </p>
|
|
</body>
|
|
</html>
|