我正在嘗試瞭解Boost函數。我想將Python函數傳遞給使用Boost Python包裝的C++模塊。我遵循給定的例子here,並修改它以接受採用輸入參數並返回一些輸出的函數。這裏是我的代碼:將Python函數傳遞給Boost C++
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);
}
當我嘗試編譯此,我在setOperator
功能,說cannot convert ‘boost::python::api::object’ to ‘double’ in return
得到一個錯誤。如果我用typedef void (op_t)(double);
替換typedef行並將callOperator
更改爲void,代碼將起作用。這允許我傳遞可以對參數進行操作但不返回任何內容的Python函數。
我的代碼有什麼問題?我應該如何糾正它傳遞一個返回值的Python函數?