gpt4 book ai didi

c++ - python函数作为c++暴露类的参数使用::boost::python

转载 作者:太空狗 更新时间:2023-10-29 21:27:55 24 4
gpt4 key购买 nike

我已经一起使用 Python 和 C++ 工作了一段时间,但从未尝试实现以下内容:

我希望 python 用户能够编写如下内容:

def foo(a,b):
return a+b

myclass.myfunc(foo)

其中 myclass 是一个使用 Boost.Python 暴露给 python 的 c++ 类,其方法之一 (myfunc) 接受一个函数:

int func(int,int)

签名,仅此而已。

这可能吗?

我正在考虑声明:

myclass::myfunc(boost::python::object)

并提取 typedef 的函数签名,但我只是猜测..

也许有更好/更可行的方法来做到这一点,也许使用一些“功能”对象?

最佳答案

您几乎猜到了答案。 Python 函数确实只是 boost::python::object实例。然后你就可以有一个 boost::function<int (int, int)>并将 Python 对象放入其中。

我刚刚安装了我的操作系统,我还没有 Boost,所以我无法测试它,但我认为如果你这样做(没有任何包装函数)它会工作:

void function(boost::function<int (int, int)> func) {
// ...
}

// And then you expose the function as you normally would

我希望上面的方法有效;如果没有,这肯定会:

void function_wrap(boost::python::object func)
{
auto lambda = [func](int a, int b) -> int {
return boost::python::extract<int>(func(a, b));
};
function(boost::function<int (int, int)>(lambda));
}

// And then you expose the wrapper, not the original function

关于c++ - python函数作为c++暴露类的参数使用::boost::python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8200414/

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