## boost/python/call.hpp

### Introduction

    <boost/python/call.hpp> defines the call family of overloaded function templates, used to invoke Python callable objects from C++.

### Function `call`

    template <class R, class A1, class A2, ... class An>
    R call(PyObject* callable, A1 const&, A2 const&, ... An const&)

Requires

  R is a pointer type, reference type, or a complete type with an accessible copy constructor

Effects

  Invokes callable(a1, a2, ...an) in Python, where a1...an are the arguments to call(), converted to Python objects.

Returns

  The result of the Python call, converted to the C++ type R.

Rationale

  For a complete semantic description and rationale, see this page.

### Example

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);
    }