gpt4 book ai didi

c++ - 从 std::function 创建一个 boost::python::object

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:48:10 32 4
gpt4 key购买 nike

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

最佳答案

Use boost::python::make_function ,并提供签名,因为默认签名不处理 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) + ")";
};
}

我们可以定义一个包装器并使用它来def:

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

Python 端现在可以根据需要使用结果:

>>> import s
>>> s.get_string_function("Coord")
<Boost.Python.function object at 0x1cca450>
>>> _(1, 4)
'Coord(x=1, y=4)'

关于c++ - 从 std::function 创建一个 boost::python::object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7741455/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com