[C++-sig] Pyste bug - static member functions...

Nicodemus nicodemus at globalite.com.br
Tue Jun 17 08:56:29 CEST 2003


Roman Sulzhyk wrote:

>Nicodemus:
>
>Another thing I've noticed, that for static member functions the code
>generated defines them in class scope instead of global scope, causing
>errors. 
>
>Basically, you need to change the 'PointerDeclaration' of Method class
>to look more like this:
>
>
>        # If a method is static, don't need the class specifier
>        if self.static:
>            scope = '*'
>        else:
>            scope = '%s::*' % self.class_
>                                                                       
>        
>        if self.const:
>            const = 'const'
>        return '(%s (%s)(%s) %s)&%s' %\
>            (result, scope, params, const, self.FullName())
>
>That fixes the problem.
>  
>

You do not seem to be using the latest CVS, Pyste uses staticmethod to 
declare static member functions:

struct C
{
    static int foo() { return 0; }
};

// Module 
======================================================================
BOOST_PYTHON_MODULE(test)
{
    class_< C >("C", init<  >())
        .def(init< const C & >())
        .def("foo", &C::foo)
        .staticmethod("foo")
    ;

}

If you are not using the latest CVS, then I might be misunderstanding 
the problem, but I *stronly* suggest that you use the latest CVS from 
both Boost.Python and Pyste... Pyste specifically has had lots of bug 
fixes and some new features since the 1.30.0 release of Boost. ;)

>I also like Dave's suggestion to use the term 'final' to denote virtual
>functions that  are not expected to be overloadable from Python.
>  
>

I considered it too, but I thought that "no_override" was more clear. 
What you guys think?

Regards,
Nicodemus.





More information about the Cplusplus-sig mailing list