blob: 6cd4d7856e6f6d928348a4f3d696ea50aba167df [file] [log] [blame]
// 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);
}