...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
<boost/python/call.hpp> defines the call family of overloaded function templates, used to invoke Python callable objects from C++.
template <class R, class A1, class A2, ... class An> R call(PyObject* callable, A1 const&, A2 const&, ... An const&)
R is a pointer type, reference type, or a complete type with an accessible copy constructor
Invokes callable(a1, a2, ...an) in Python, where a1...an are the arguments to call(), converted to Python objects.
The result of the Python call, converted to the C++ type R.
For a complete semantic description and rationale, see this page.
The following C++ function applies a Python callable object to its two arguments and returns the result. If a Python exception is raised or the result can't be converted to a double, an exception is thrown.
double apply2(PyObject* func, double x, double y) { return boost::python::call<double>(func, x, y); }