| <html> |
| <head> |
| <!-- Generated by the Spirit (http://spirit.sf.net) QuickDoc --> |
| <title>The Interface Files</title> |
| <link rel="stylesheet" href="theme/style.css" type="text/css"> |
| <link rel="prev" href="running_pyste.html"> |
| <link rel="next" href="renaming_and_excluding.html"> |
| </head> |
| <body> |
| <table width="100%" height="48" border="0" cellspacing="2"> |
| <tr> |
| <td><img src="../../../../boost.png"> |
| </td> |
| <td width="85%"> |
| <font size="6" face="Verdana, Arial, Helvetica, sans-serif"><b>The Interface Files</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="running_pyste.html"><img src="theme/l_arr.gif" border="0"></a></td> |
| <td width="20"><a href="renaming_and_excluding.html"><img src="theme/r_arr.gif" border="0"></a></td> |
| </tr> |
| </table> |
| <p> |
| The interface files are the heart of Pyste. The user creates one or more |
| interface files declaring the classes and functions he wants to export, and then |
| invokes Pyste passing the interface files to it. Pyste then generates a single |
| cpp file with <a href="../../index.html"> |
| Boost.Python</a> code, with all the classes and functions exported.</p> |
| <p> |
| Besides declaring the classes and functions, the user has a number of other |
| options, like renaming e excluding classes and member functionis. Those are |
| explained later on.</p> |
| <a name="basics"></a><h2>Basics</h2><p> |
| Suppose we have a class and some functions that we want to expose to Python |
| declared in the header <tt>hello.h</tt>:</p> |
| <code><pre> |
| <span class=keyword>struct </span><span class=identifier>World |
| </span><span class=special>{ |
| </span><span class=identifier>World</span><span class=special>(</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>string </span><span class=identifier>msg</span><span class=special>): </span><span class=identifier>msg</span><span class=special>(</span><span class=identifier>msg</span><span class=special>) {} |
| </span><span class=keyword>void </span><span class=identifier>set</span><span class=special>(</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>string </span><span class=identifier>msg</span><span class=special>) { </span><span class=keyword>this</span><span class=special>-></span><span class=identifier>msg </span><span class=special>= </span><span class=identifier>msg</span><span class=special>; } |
| </span><span class=identifier>std</span><span class=special>::</span><span class=identifier>string </span><span class=identifier>greet</span><span class=special>() { </span><span class=keyword>return </span><span class=identifier>msg</span><span class=special>; } |
| </span><span class=identifier>std</span><span class=special>::</span><span class=identifier>string </span><span class=identifier>msg</span><span class=special>; |
| }; |
| |
| </span><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><span class=keyword>namespace </span><span class=identifier>test </span><span class=special>{ |
| |
| </span><span class=keyword>void </span><span class=identifier>show</span><span class=special>(</span><span class=identifier>choice </span><span class=identifier>c</span><span class=special>) { </span><span class=identifier>std</span><span class=special>::</span><span class=identifier>cout </span><span class=special><< </span><span class=string>"value: " </span><span class=special><< (</span><span class=keyword>int</span><span class=special>)</span><span class=identifier>c </span><span class=special><< </span><span class=identifier>std</span><span class=special>::</span><span class=identifier>endl</span><span class=special>; } |
| |
| } |
| </span></pre></code> |
| <p> |
| We create a file named <tt>hello.pyste</tt> and create instances of the classes |
| <tt>Function</tt>, <tt>Class</tt> and <tt>Enum</tt>:</p> |
| <code><pre> |
| <span class=identifier>Function</span><span class=special>(</span><span class=string>"test::show"</span><span class=special>, </span><span class=string>"hello.h"</span><span class=special>) |
| </span><span class=identifier>Class</span><span class=special>(</span><span class=string>"World"</span><span class=special>, </span><span class=string>"hello.h"</span><span class=special>) |
| </span><span class=identifier>Enum</span><span class=special>(</span><span class=string>"choice"</span><span class=special>, </span><span class=string>"hello.h"</span><span class=special>) |
| </span></pre></code> |
| <p> |
| That will expose the class, the free function and the enum found in <tt>hello.h</tt>. </p> |
| <a name="inheritance"></a><h2>Inheritance</h2><p> |
| Pyste automatically generates the correct code (specifying <tt>bases<></tt> in the |
| <tt>class_</tt> declaration) <b>if</b> the Class() function that exports the base classes |
| and their children are in the same Pyste file. If that's not the case, you have |
| to indicate that there's a relationship between the Pyste files using the |
| <tt>Import</tt> function specifying the other Pyste file.</p> |
| <p> |
| Suppose we have two classes, <tt>A</tt> and <tt>B</tt>, and A is a base class for B. We |
| create two Pyste files:</p> |
| <p> |
| <tt>A.pyste</tt>:</p> |
| <code><pre> |
| <span class=identifier>Class</span><span class=special>(</span><span class=string>"A"</span><span class=special>, </span><span class=string>"A.h"</span><span class=special>) |
| </span></pre></code> |
| <p> |
| <tt>B.pyste</tt>:</p> |
| <code><pre> |
| <span class=identifier>Import</span><span class=special>(</span><span class=string>"A.pyste"</span><span class=special>) |
| </span><span class=identifier>Class</span><span class=special>(</span><span class=string>"B"</span><span class=special>, </span><span class=string>"B.h"</span><span class=special>) |
| </span></pre></code> |
| <p> |
| Note that we specify that <tt>B</tt> needs to know about <tt>A</tt> to be properly exported.</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="running_pyste.html"><img src="theme/l_arr.gif" border="0"></a></td> |
| <td width="20"><a href="renaming_and_excluding.html"><img src="theme/r_arr.gif" border="0"></a></td> |
| </tr> |
| </table> |
| <br> |
| <hr size="1"><p class="copyright">Copyright © 2003 Bruno da Silva de Oliveira<br>Copyright © 2002-2003 Joel de Guzman<br><br> |
| <font size="2">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) </font> </p> |
| </body> |
| </html> |