python函数作为参数使用:: boost :: python来公开类
作者:互联网
我已经与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)
并提取类型定义的函数签名,但我只是猜测.
也许有一个更好/可行的方法来做到这一点,也许有一些“功能”对象?
解决方法:
您几乎猜到了答案. 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
标签:boost-python,python,c-4 来源: https://codeday.me/bug/20191202/2085644.html