1 // Copyright David Abrahams 2002.
2 // Distributed under the Boost Software License, Version 1.0. (See
3 // accompanying file LICENSE_1_0.txt or copy at
4 // http://www.boost.org/LICENSE_1_0.txt)
5 #include <boost/python.hpp>
6 #include <string>
7
8 struct Foo
9 {
FooFoo10 Foo(
11 int a = 0
12 , double b = 0
13 , const std::string &n = std::string()
14 ) :
15 a_(a)
16 , b_(b)
17 , n_(n)
18 {}
19
setFoo20 void set(int a=0, double b=0, const std::string &n=std::string())
21 {
22 a_ = a;
23 b_ = b;
24 n_ = n;
25 }
26
getaFoo27 int geta() const { return a_; }
28
getbFoo29 double getb() const { return b_; }
30
getnFoo31 std::string getn() const { return n_; }
32
33 private:
34 int a_;
35 double b_;
36 std::string n_;
37 };
38
39 struct Bar
40 {
BarBar41 Bar(
42 int a = 0
43 , double b = 0
44 , const std::string &n = std::string()
45 ) :
46 a_(a)
47 , b_(b)
48 , n_(n)
49 {}
50
setBar51 void set(int a=0, double b=0, const std::string &n=std::string())
52 {
53 a_ = a;
54 b_ = b;
55 n_ = n;
56 }
57
setaBar58 void seta(int a)
59 {
60 a_ = a;
61 }
62
getaBar63 int geta() const { return a_; }
64
getbBar65 double getb() const { return b_; }
66
getnBar67 std::string getn() const { return n_; }
68
69 private:
70 int a_;
71 double b_;
72 std::string n_;
73 };
74
75 BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(bar_set, Bar::set, 0,3)
76
77 using namespace boost::python;
BOOST_PYTHON_MODULE(keywords)78 BOOST_PYTHON_MODULE(keywords)
79 {
80 #if BOOST_WORKAROUND(__GNUC__, == 2)
81 using boost::python::arg;
82 #endif
83
84 class_<Foo>(
85 "Foo"
86 , init<int, double, const std::string&>(
87 ( arg("a") = 0
88 , arg("b") = 0.0
89 , arg("n") = std::string()
90 )
91 ))
92
93 .def("set", &Foo::set, (arg("a") = 0, arg("b") = 0.0, arg("n") = std::string()) )
94
95 .def("set2", &Foo::set, (arg("a"), "b", "n") )
96
97 .def("a", &Foo::geta)
98 .def("b", &Foo::getb)
99 .def("n", &Foo::getn)
100 ;
101
102 class_<Bar>("Bar"
103 , init<optional<int, double, const std::string &> >()
104 )
105 .def("set", &Bar::set, bar_set())
106 .def("set2", &Bar::set, bar_set("set2's docstring"))
107 .def("seta", &Bar::seta, arg("a"))
108
109 .def("a", &Bar::geta)
110 .def("b", &Bar::getb)
111 .def("n", &Bar::getn)
112 ;
113
114 }
115
116
117
118 #include "module_tail.cpp"
119