The boost/python/args.hpp provides a family of classes for specifying keyword arguments. In particular, Boost.Python provides an arg type that represents a potential keyword argument. It overloads the comma operator to provide a more natural definition of the argument list.
Mapping myFunction in MyClass as my_function , where a , b and c are the keyword arguments, and c has a default value of 0 , which can be written as follows
BOOST_PYTHON_MODULE(example) { namespace python = boost::python; python::class_<MyClass>("MyClass") .def("my_function", &MyClass::myFunction, (python::arg("a"), "b", python::arg("c")=0)) ; }
Here is a complete example:
#include <boost/python.hpp> class MyClass { public: double myFunction(int a, int b, int c) { return a + b + c; } }; BOOST_PYTHON_MODULE(example) { namespace python = boost::python; python::class_<MyClass>("MyClass") .def("my_function", &MyClass::myFunction, (python::arg("a"), "b", python::arg("c")=0)) ; }
Interactive use:
>>> import example >>> my_class = example.MyClass() >>> my_class.my_function(1) Traceback (most recent call last): File "<stdin>", line 1, in <module> Boost.Python.ArgumentError: Python argument types in MyClass.my_function(MyClass, int) did not match C++ signature: my_function(MyClass {lvalue}, int a, int b, int c=0) >>> assert(5 == my_class.my_function(2, 3)) >>> assert(6 == my_class.my_function(2, 3, 1)) >>> my_class.my_function(2, 3, 1, 3) Traceback (most recent call last): File "<stdin>", line 1, in <module> Boost.Python.ArgumentError: Python argument types in MyClass.my_function(MyClass, int, int, int, int) did not match C++ signature: my_function(MyClass {lvalue}, int a, int b, int c=0) >>> assert(6 == my_class.my_function(3, 1, c=2)) >>> assert(7 == my_class.my_function(a=2, b=2, c=3)) >>> my_class.my_function(b=2, c=1) Traceback (most recent call last): File "<stdin>", line 1, in <module> Boost.Python.ArgumentError: Python argument types in MyClass.my_function(MyClass) did not match C++ signature: my_function(MyClass {lvalue}, int a, int b, int c=0)