119 lines
2.2 KiB
C++
119 lines
2.2 KiB
C++
// Copyright David Abrahams 2002.
|
|
// 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 <string>
|
|
|
|
struct Foo
|
|
{
|
|
Foo(
|
|
int a = 0
|
|
, double b = 0
|
|
, const std::string &n = std::string()
|
|
) :
|
|
a_(a)
|
|
, b_(b)
|
|
, n_(n)
|
|
{}
|
|
|
|
void set(int a=0, double b=0, const std::string &n=std::string())
|
|
{
|
|
a_ = a;
|
|
b_ = b;
|
|
n_ = n;
|
|
}
|
|
|
|
int geta() const { return a_; }
|
|
|
|
double getb() const { return b_; }
|
|
|
|
std::string getn() const { return n_; }
|
|
|
|
private:
|
|
int a_;
|
|
double b_;
|
|
std::string n_;
|
|
};
|
|
|
|
struct Bar
|
|
{
|
|
Bar(
|
|
int a = 0
|
|
, double b = 0
|
|
, const std::string &n = std::string()
|
|
) :
|
|
a_(a)
|
|
, b_(b)
|
|
, n_(n)
|
|
{}
|
|
|
|
void set(int a=0, double b=0, const std::string &n=std::string())
|
|
{
|
|
a_ = a;
|
|
b_ = b;
|
|
n_ = n;
|
|
}
|
|
|
|
void seta(int a)
|
|
{
|
|
a_ = a;
|
|
}
|
|
|
|
int geta() const { return a_; }
|
|
|
|
double getb() const { return b_; }
|
|
|
|
std::string getn() const { return n_; }
|
|
|
|
private:
|
|
int a_;
|
|
double b_;
|
|
std::string n_;
|
|
};
|
|
|
|
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(bar_set, Bar::set, 0,3)
|
|
|
|
using namespace boost::python;
|
|
BOOST_PYTHON_MODULE(keywords)
|
|
{
|
|
#if BOOST_WORKAROUND(__GNUC__, == 2)
|
|
using boost::python::arg;
|
|
#endif
|
|
|
|
class_<Foo>(
|
|
"Foo"
|
|
, init<int, double, const std::string&>(
|
|
( arg("a") = 0
|
|
, arg("b") = 0.0
|
|
, arg("n") = std::string()
|
|
)
|
|
))
|
|
|
|
.def("set", &Foo::set, (arg("a") = 0, arg("b") = 0.0, arg("n") = std::string()) )
|
|
|
|
.def("set2", &Foo::set, (arg("a"), "b", "n") )
|
|
|
|
.def("a", &Foo::geta)
|
|
.def("b", &Foo::getb)
|
|
.def("n", &Foo::getn)
|
|
;
|
|
|
|
class_<Bar>("Bar"
|
|
, init<optional<int, double, const std::string &> >()
|
|
)
|
|
.def("set", &Bar::set, bar_set())
|
|
.def("set2", &Bar::set, bar_set("set2's docstring"))
|
|
.def("seta", &Bar::seta, arg("a"))
|
|
|
|
.def("a", &Bar::geta)
|
|
.def("b", &Bar::getb)
|
|
.def("n", &Bar::getn)
|
|
;
|
|
|
|
}
|
|
|
|
|
|
|
|
#include "module_tail.cpp"
|