编程语言
首页 > 编程语言> > python函数作为参数使用:: boost :: python来公开类

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