我有C ++类来处理C ++和python的回调。例如:
typedef void (*SomeCppCallback)(int count);
class Callback {
public:
Callback(PyObject* callable);
Callback(SomeCppCallback callable);
}
有些API使用它,例如:
void Foo(Callback) {
// doing something
}
BOOST_PYTHON_MODULE(libexample_project) {
class_<Callback>("Callback", init<PyObject*>());
def("Foo", Foo);
}
我希望在python方面调用Foo并使用回调将隐式转换为Callback,但它不起作用 - 代码类似
import libexample_project
def PrintMe(number):
print "I am", number
libexample_project.Foo(PrintMe)
我遇到了错误:
Boost.Python.ArgumentError: Python argument types in
Foo(function)
did not match C++ signature:
Foo(Callback)
我尝试使用implicitly_convertible:
BOOST_PYTHON_MODULE(libexample_project) {
class_<Callback>("Callback", init<PyObject*>());
implicitly_convertible<PyObject*, Callback>();
def("Foo", Foo);
}
但徒劳无功。
有什么建议吗?