Ticket #4166: internal_refs.cpp

File internal_refs.cpp, 901 bytes (added by François ALLAIN <frallain@…>, 12 years ago)

the correct code file

Line 
1#include <boost/python/module.hpp>
2#include <boost/python/class.hpp>
3#include <boost/python/return_internal_reference.hpp>
4
5class Bar
6{
7 public:
8 Bar(int x) : x(x) {}
9 int get_x() const { return x; }
10 void set_x(int x) { this->x = x; }
11 private:
12 int x;
13};
14
15class Foo
16{
17 public:
18 Foo(int x) : b(x) {}
19
20 // Returns an internal reference
21 Bar const& get_bar() const { return b; }
22
23 private:
24 Bar b;
25};
26
27using namespace boost::python;
28BOOST_PYTHON_MODULE(internal_refs)
29{
30 class_<Bar>("Bar", init<int>())
31 .def("get_x", &Bar::get_x)
32 .def("set_x", &Bar::set_x)
33 ;
34
35 class_<Foo>("Foo", init<int>())
36 .def("get_bar", &Foo::get_bar
37 , return_internal_reference<>())
38 ;
39}
40
41//>>> from internal_refs import *
42//>>> f = Foo(3)
43//>>> b1 = f.get_bar()
44//>>> b2 = f.get_bar()
45//>>> b1.get_x()
46//3
47//>>> b2.get_x()
48//3
49//>>> b1.set_x(42)
50//>>> b2.get_x()
51//42
52