[C++-sig] std::auto_ptr<> in constructor

Roman Yakovenko roman.yakovenko at gmail.com
Thu Apr 15 08:13:25 CEST 2010


On Thu, Apr 15, 2010 at 7:17 AM, Roman Yakovenko
<roman.yakovenko at gmail.com> wrote:
> On Thu, Apr 15, 2010 at 1:08 AM, Tomasz Mikolajczyk
> <tmmikolajczyk at gmail.com> wrote:
>> Hi,
>>
>> I'm a new user of boost::python art. I started to play a bit with the
>> code and the py++ generator and encountered difficulties with the
>> std::auto_ptr in constructor.
>> ...
>> I understand the error but I don't know what to do to avoid it.

I believe this error has nothing to do with py++ and it is a pure
Boost.Python issue.

I can propose a work around for you:

introduce the following function:


std::auto_ptr< B > createB(int value, std::auto_ptr<A> a){
    return std::auto_ptr< B >( new B( value, a ) );
}

and instruct py++ to use it as "__init__" method:

B = mb.class_( 'B' )
B.constructors().exclude()
B.add_fake_constructors( mb.free_function( 'createB' ) )


one more step:

A = mb.class_('A' )
A.held_type = 'std::auto_ptr< %s >' % A.decl_string

This will allow you to create A class instance in Python, and
internally it will be held using auto_ptr class.

I actually tested it and it works (
http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1837&view=rev ).

HTH

-- 
Roman Yakovenko
C++ Python language binding
http://www.language-binding.net/


More information about the Cplusplus-sig mailing list