mirror of
https://github.com/boostorg/python.git
synced 2026-01-22 05:22:45 +00:00
53 lines
864 B
C++
53 lines
864 B
C++
|
|
#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);
|
|
}
|