1

我有处理 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);
}

但徒劳无功。

有什么建议么?

4

0 回答 0