• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright David Abrahams 2004. Distributed under the Boost
2 // Software License, Version 1.0. (See accompanying
3 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
4 
5 #include <boost/python.hpp>
6 #include <boost/shared_ptr.hpp>
7 
8 using namespace boost;
9 using namespace python;
10 
11 struct A
12 {
fA13     virtual int f() { return 0; }
14 };
15 
New()16 shared_ptr<A> New() { return shared_ptr<A>( new A() ); }
17 
Call(const shared_ptr<A> & a)18 int Call( const shared_ptr<A> & a )
19 {
20     return a->f();
21 }
22 
Fail(shared_ptr<A> & a)23 int Fail( shared_ptr<A> & a )
24 {
25     return a->f();
26 }
27 
28 struct A_Wrapper: A
29 {
A_WrapperA_Wrapper30     A_Wrapper(PyObject* self_): self(self_) {}
A_WrapperA_Wrapper31     A_Wrapper(PyObject* self_, const A& a): self(self_), A(a) {}
32 
fA_Wrapper33     int f()
34     {
35         return call_method<int>(self, "f");
36     }
37 
default_fA_Wrapper38     int default_f()
39     {
40         return A::f();
41     }
42 
43     PyObject* self;
44 };
45 
BOOST_PYTHON_MODULE(register_ptr)46 BOOST_PYTHON_MODULE(register_ptr)
47 {
48     class_<A, A_Wrapper>("A")
49         .def("f", &A::f, &A_Wrapper::default_f)
50     ;
51     register_ptr_to_python< shared_ptr<A> >();
52     def("New", &New);
53     def("Call", &Call);
54     def("Fail", &Fail);
55 }
56