[C++-sig] Class scoped enum losing scope

Rao, Sumeeth sumeetr at qualcomm.com
Thu Feb 5 02:58:08 CET 2009


I am a newbie in using boost python. I use boost python version 1.33.1, on linux x64 Fedora 9 kernel.
Here is a problem I am facing:

C++ code:
class Foo{
   typedef enum {

class  Bar {
    bool barfun(Foo::etype type);

Boost Python bindings:
In foo.pypp.cpp:
void register_Foo_class(){

    { //::Foo
        typedef bp::class_< Foo > Foo_exposer_t;
        Foo_exposer_t Foo_exposer = Foo_exposer_t( "Foo" );
        bp::scope Foo_scope( Foo_exposer );
        bp::enum_< Foo::eType>("eType")
            .value("TYPE_A", Foo::TYPE_A)
            .value("TYPE_B", Foo::TYPE_B)
            .value("TYPE_C", Foo::TYPE_C)

In bar.pypp.cpp:

struct Bar_wrapper : Bar, bp::wrapper<Bar > {

    bool barfun( ::Foo::eType eType,) {
        if( bp::override func_barfun = this->get_override( "barfun" ) )
            return func_barfun( eType);
            return this->Bar::barfun( eType);

    bool default_barfun( ::Foo::eType eType) {
        return Bar::barfun( eType);


void register_Bar_class(){

    bp::class_< Bar_wrapper >( "Bar" )

            , &::Bar::barfun
            , &bar_wrapper::default_barfun
            , ( bp::arg("eType") ) )

>>> import Boost_FooBar
>>> bar = Boost_FooBar.Bar()
>>> var = Boost_FooBar.Foo.eType.TYPE_B           < --Seems to understand that there is a  Foo::etype::TYPE_B value
>>> var
Boost_FooBar.eType.TYPE_B               <------------------ var seems to have "lost" the scope of class Foo!
>>> print var
>>> stat = bar.barfun(Boost_FooBar.Foo.eType.TYPE_B)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
Boost.Python.ArgumentError: Python argument types in
    Bar.barfun(Bar, Boost_FooBar.eType)                 < ------ Why is the parameter not of type Boost_FooBar.Foo.eType?
did not match C++ signature:
    barfun(Bar_wrapper {lvalue}, Foo::eType eType)
    barfun(Bar {lvalue}, Foo::eType eType)

Could someone help me in figuring out the problem why the class scope is being "lost" or the reason python is converting Boost_FooBar.Foo.eType   to Boost_FooBar.eType


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20090204/3044e5dd/attachment-0001.htm>

More information about the Cplusplus-sig mailing list