C++ 从std::函数创建boost::python::对象

C++ 从std::函数创建boost::python::对象,c++,python,boost,c++11,boost-python,C++,Python,Boost,C++11,Boost Python,如何从std::function构造boost::python::object?,并提供签名,因为默认的签名不处理std::function 例如,我们希望包装以下返回类型: std::function<std::string(int, int)> get_string_function(const std::string& name) { return [=](int x, int y) { return name + "(x=" + std

如何从std::function构造boost::python::object?

,并提供签名,因为默认的签名不处理std::function

例如,我们希望包装以下返回类型:

std::function<std::string(int, int)> get_string_function(const std::string& name)
{
    return [=](int x, int y)
    {
        return name + "(x=" + std::to_string(x) + ", y=" + std::to_string(y) + ")";
    };
}
Python端现在可以根据需要使用结果:

导入 >>>s.get_字符串_函数(“坐标”) >>> _(1, 4) “坐标(x=1,y=4)”
boost::python::object get_string_function_pywrapper(const std::string& name)
{
    auto func = get_string_function(name);
    auto call_policies = boost::python::default_call_policies();
    typedef boost::mpl::vector<std::string, int, int> func_sig;
    return boost::python::make_function(func, call_policies, func_sig());
}

BOOST_PYTHON_MODULE(s)
{
    boost::python::def("get_string_function", get_string_function_pywrapper);
}