使用Boost.Python将带有std :: function参数的C ++函数导出到Python

时间:2016-11-15 15:10:47

标签: python c++ boost

我有以下函数签名,我试图用Boost包装。蟒。

void myfunc(std::string str1, std::string str2,
            std::function<void(std::string)> callback1,
            std::function<void(int, std::string)> callback2);

我尝试在Boost.Python中将其导出为:

BOOST_PYTHON_MODULE(my_module)
{
    using namespace boost::python;

    class_<MyClass>("MyClass")
        .def("myfunc", &MyClass::myfunc)
    ;
}

用Python调用它:

def update(message):
    print(message)


def error(status, message):
    print("Error {}: {}".format(status, message))


strarg1c= r"""path..."""
strarg2 = "test"

import my_module
obj = my_module.MyClass()
obj.myfunc(strarg1, strarg2, update, error)

但我收到以下错误:

Boost.Python.ArgumentError: Python argument types in
    MyClass.myfunc(MyClass, str, str, function, function)
did not match C++ signature:
    myfunc(class Myclass {lvalue}, class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >, class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >, class std::function<void __cdecl(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)>, class std::function<void __cdecl(int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)>)

我发现了一些类似的问题,但它们通常将处理任意函数作为返回类型处理,而不是处理函数参数列表中的一个。我希望Boost.Python和std::function有一些简单的东西。

似乎Pybind11 has this functionality。 Boost.Python中缺少此功能还是我遗漏了什么?

0 个答案:

没有答案