我有处理 C++ 和 python 回调的 C++ 类。例如:
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);
}
但徒劳无功。
有什么建议么?