[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