1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
// Copyright David Abrahams 2004. 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 <boost/python.hpp>
#include <boost/shared_ptr.hpp>
using namespace boost;
using namespace python;
struct A
{
virtual int f() { return 0; }
};
shared_ptr<A> New() { return shared_ptr<A>( new A() ); }
int Call( const shared_ptr<A> & a )
{
return a->f();
}
int Fail( shared_ptr<A> & a )
{
return a->f();
}
struct A_Wrapper: A
{
A_Wrapper(PyObject* self_): self(self_) {}
A_Wrapper(PyObject* self_, const A& a): self(self_), A(a) {}
int f()
{
return call_method<int>(self, "f");
}
int default_f()
{
return A::f();
}
PyObject* self;
};
BOOST_PYTHON_MODULE(register_ptr)
{
class_<A, A_Wrapper>("A")
.def("f", &A::f, &A_Wrapper::default_f)
;
register_ptr_to_python< shared_ptr<A> >();
def("New", &New);
def("Call", &Call);
def("Fail", &Fail);
}
|