[C++-sig] Py++ filter based on return type

Roman Yakovenko roman.yakovenko at gmail.com
Sat Mar 29 07:46:59 CET 2008


2008/3/28 Rolf Schlup <rschlup at highspeedcrow.ca>:
> Hi Roman,

Good morning

>   I'm trying to bind a relatively complex interface class of an IG control
> system and it has a lot of methods that return references to member which
> are classes in themselves.  I'm also working on a script that will
> automatically create a Py++ script from Rational Rose model.

Coool :-)

> I have become
> a little stuck in creating a Py++ that will create a module class that will
> build.
>
> Hopefully, you'll be able to answer the following questions so that I can
> get back to it
>
> 1)       Since there are a whole lot of methods, what is the best way to
> work with the call policies – especially with the member functions that
> return references to other classes using & and not pointers

Py++ & call policies documentation:
http://language-binding.net/pyplusplus/documentation/functions/call_policies.html
type_traits ( similar to Boost.TypeTraits ) functionality:
http://www.language-binding.net/pygccxml/apidocs/pygccxml.declarations.type_traits-module.html

The usage example for your use case

from pygccxml import declarations
from pyplusplus.module_builder import call_policies

mb = module_builder_t(...)

def has_return_internal_reference_policy( f ):
    if not f.return_type: #constructor or destructor
        return False
    r_type = f.return_type
    if declarations.is_reference(r_type) and declarations.is_class(
declarations.remove_reference( r_type ):
        return True
    if declarations.is_pointer(r_type) and declarations.is_class(
declarations.remove_pointer( r_type ):
        return True
    #TODO: add const treatment
    return False

scope = mb.[namespace|class_](....) #select the appropriate scope
scope.calldefs( has_return_internal_reference_policy ).call_policies =
call_policies.return_internal_reference()



> 2)       Minimize the need for 20 or more include declarations.  Including
> only those files that are absolutely necessary for the class being bound

What version do you use? I worked hard to minimize the number of
included files. Can you create small example?

> 3)       I've been looking for examples for what I'm trying to do, but they
> are very scarce.  I think I'm past the whole hello_world thing.  Is there a
> place on the web that has what I'm looking for?

I don't exactly understand what you are trying to do, but here few
links that I hope will help you:

* few boost libraries wrapped by me:
http://pygccxml.svn.sourceforge.net/viewvc/pygccxml/pyplusplus_dev/examples/pyboost_dev/dev/
* python-ogre - huge repository of modules wrapped with Py++ -
http://python-ogre.svn.sourceforge.net/viewvc/python-ogre/trunk/python-ogre/code_generators/
  take a look on "common_utils" directory

HTH, if not come back and ask more specific question :-)

-- 
Roman Yakovenko
C++ Python language binding
http://www.language-binding.net/



More information about the Cplusplus-sig mailing list