[C++-sig] Define class in 2 scopes without re-exposing

John Reid j.reid at mail.cryst.bbk.ac.uk
Mon Apr 16 09:15:01 CEST 2012



On 15/04/12 03:23, Dave Abrahams wrote:
>
> You can't do this; don't even try.  Each C++ class has to have a unique
> Python identity.  If you just want to refer to the same class by a
> different name, you can of course:
>
> BOOST_PYTHON_MODULE( _sandbox )
> {
>      namespace bp = ::boost::python;
>      object inner;
>      {
>          bp::scope scope = bp::class_<  Outer1>( "Outer1" );
>          inner = bp::class_<  Inner>( "Inner" );
>      }
>
>      {
>          object outer2 = bp::class_<  Outer2>( "Outer2" );
>          outer2.attr("Inner") = inner;
>      }
> }
>

I didn't know you could do that and it is useful but it is not quite 
what I had in mind. I would rather not pass the inner object around all 
the parts of my code that might need it. Is it possible to get it out of 
the registry in the second block? I'm guessing it must be in there 
somewhere as I get exactly the same behaviour (plus the warning message) 
if I just register the class in both blocks.

Thanks,
John.



More information about the Cplusplus-sig mailing list