<html> <head> <!-- Generated by the Spirit (http://spirit.sf.net) QuickDoc --> <title>Basic Interface</title> <link rel="stylesheet" href="theme/style.css" type="text/css"> <link rel="prev" href="object_interface.html"> <link rel="next" href="derived_object_types.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>Basic Interface</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="object_interface.html"><img src="theme/l_arr.gif" border="0"></a></td> <td width="20"><a href="derived_object_types.html"><img src="theme/r_arr.gif" border="0"></a></td> </tr> </table> <p> Class <tt>object</tt> wraps <tt>PyObject*</tt>. All the intricacies of dealing with <tt>PyObject</tt>s such as managing reference counting are handled by the <tt>object</tt> class. C++ object interoperability is seamless. Boost.Python C++ <tt>object</tt>s can in fact be explicitly constructed from any C++ object.</p> <p> To illustrate, this Python code snippet:</p> <code><pre> <span class=identifier>def </span><span class=identifier>f</span><span class=special>(</span><span class=identifier>x</span><span class=special>, </span><span class=identifier>y</span><span class=special>): </span><span class=keyword>if </span><span class=special>(</span><span class=identifier>y </span><span class=special>== </span><span class=literal>'foo'</span><span class=special>): </span><span class=identifier>x</span><span class=special>[</span><span class=number>3</span><span class=special>:</span><span class=number>7</span><span class=special>] = </span><span class=literal>'bar' </span><span class=keyword>else</span><span class=special>: </span><span class=identifier>x</span><span class=special>.</span><span class=identifier>items </span><span class=special>+= </span><span class=identifier>y</span><span class=special>(</span><span class=number>3</span><span class=special>, </span><span class=identifier>x</span><span class=special>) </span><span class=keyword>return </span><span class=identifier>x </span><span class=identifier>def </span><span class=identifier>getfunc</span><span class=special>(): </span><span class=keyword>return </span><span class=identifier>f</span><span class=special>; </span></pre></code> <p> Can be rewritten in C++ using Boost.Python facilities this way:</p> <code><pre> <span class=identifier>object </span><span class=identifier>f</span><span class=special>(</span><span class=identifier>object </span><span class=identifier>x</span><span class=special>, </span><span class=identifier>object </span><span class=identifier>y</span><span class=special>) { </span><span class=keyword>if </span><span class=special>(</span><span class=identifier>y </span><span class=special>== </span><span class=string>"foo"</span><span class=special>) </span><span class=identifier>x</span><span class=special>.</span><span class=identifier>slice</span><span class=special>(</span><span class=number>3</span><span class=special>,</span><span class=number>7</span><span class=special>) = </span><span class=string>"bar"</span><span class=special>; </span><span class=keyword>else </span><span class=identifier>x</span><span class=special>.</span><span class=identifier>attr</span><span class=special>(</span><span class=string>"items"</span><span class=special>) += </span><span class=identifier>y</span><span class=special>(</span><span class=number>3</span><span class=special>, </span><span class=identifier>x</span><span class=special>); </span><span class=keyword>return </span><span class=identifier>x</span><span class=special>; } </span><span class=identifier>object </span><span class=identifier>getfunc</span><span class=special>() { </span><span class=keyword>return </span><span class=identifier>object</span><span class=special>(</span><span class=identifier>f</span><span class=special>); } </span></pre></code> <p> Apart from cosmetic differences due to the fact that we are writing the code in C++, the look and feel should be immediately apparent to the Python coder.</p> <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="object_interface.html"><img src="theme/l_arr.gif" border="0"></a></td> <td width="20"><a href="derived_object_types.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>