I'm trying to learn about Boost functions. I want to pass a Python function to a C++ module wrapped using Boost Python. I followed the example given here and modified it to accept functions that take an input argument and return some output. Here's my code:
typedef double (op_t)(double);
boost::function<op_t> op;
double defaultOperator(double t) {
return t;
}
void setOperator(boost::python::object obj) {
op = obj;
}
double callOperator(double t) {
return op(t);
}
BOOST_PYTHON_MODULE(op1) {
op = &defaultOperator;
def("setOperator", &setOperator);
def("callOperator", &callOperator);
}
When I try to compile this, I get an error in my setOperator
function that says cannot convert ‘boost::python::api::object’ to ‘double’ in return
. The code works if I replace the typedef line with typedef void (op_t)(double);
and change callOperator
to return void. This allows me to pass Python functions that can operate on arguments but do not return anything.
What is wrong in my code? How should I correct it to pass a Python function that returns a value?