boost :: python PyObject隐式强制转换

时间:2014-12-21 16:04:21

标签: python boost callback implicit-cast pyobject

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

但徒劳无功。

有什么建议吗?

0 个答案:

没有答案