// Copyright David Abrahams 2005. Distributed under the Boost // Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include #include #include #include struct data { virtual ~data() {}; // silence compiler warnings virtual int id() const { return 42; } }; std::auto_ptr create_data() { return std::auto_ptr( new data ); } void do_nothing( std::auto_ptr& ){} namespace bp = boost::python; struct data_wrapper : data, bp::wrapper< data > { data_wrapper(data const & arg ) : data( arg ) , bp::wrapper< data >() {} data_wrapper() : data() , bp::wrapper< data >() {} virtual int id() const { if( bp::override id = this->get_override( "id" ) ) return bp::call(id.ptr()); // id(); else return data::id( ); } virtual int default_id( ) const { return this->data::id( ); } }; BOOST_PYTHON_MODULE(wrapper_held_type_ext) { bp::class_< data_wrapper, std::auto_ptr< data > >( "data" ) .def( "id", &data::id, &::data_wrapper::default_id ); bp::def( "do_nothing", &do_nothing ); bp::def( "create_data", &create_data ); } #include "module_tail.cpp"