[C++-sig] Default arguments in pyplusplus

Niall Douglas s_sourceforge at nedprod.com
Tue Jun 20 04:22:30 CEST 2006

On 19 Jun 2006 at 8:17, Roman Yakovenko wrote:

> Why don't you resolve the issue with enums. I see few ways to go:
> To find places where enum used as default arguments and enum still not exported
> >From here you have 2 solutions: to remove default arguments or to change default
> arguments to have integer type with value of enum. This should work.

I tried this one using the following:

    # Patch default args with enums to be number (to avoid undeclared 
enum problem)
    allfuncs = mb.calldefs()
    for func in allfuncs:
        print type(func), type(func.parent), func
        for arg in func.arguments:
            # Is it an argument with a default value?
            if arg.default_value:
                # Is it an enumeration?
                if isinstance( arg.type, 
declarations.cpptypes.declarated_t ) and isinstance( 
arg.type.declaration, declarations.enumeration.enumeration_t ):
                    # Is it an embedded enum rather than global?
                    scopecount = arg.default_value.count('::') - 
                    if scopecount>1:
                        # Be lazy, and just lookup the last part
                        value = arg.default_value[ 
arg.default_value.rfind('::')+2: ]
                        arg.default_value = 
arg.type.declaration.values[ value ] + '/*' + arg.default_value + 

And this works fine. EXCEPT that class wrappers also take the int 
converted default parameter, which leads unfortunately to code like 

type=0/*::FX::QBlkSocket::Stream*/, ::FX::FXushort port=0 )
    : FX::QBlkSocket( type, port )
      , bp::wrapper< FX::QBlkSocket >()
    {   // Normal constructor

Of course, this won't compile. Any ideas?

Thanks for the enum idea. If I can get keyword parameters working I'd 
be very happy.


More information about the Cplusplus-sig mailing list