如何绑定从外部库接受类型的函数

时间:2019-09-17 23:14:23

标签: pybind11

我正在尝试绑定一个如下接受Gst Buffer的函数

 some_function(GstBuffer *buffer)
 m.def(some_function,&some_function); 

使用上面的代码将其绑定,当从python调用时,它说

some_function支持args0:_GstBuffer类型,但不支持python类型的Gst.Buffer对象。

我试图放        GST = py :: module :: import('gi.repository.Gst')但没有用,是否有其他方法可以解决此问题。 谢谢

1 个答案:

答案 0 :(得分:0)

如果您要绑定接受pybind未知类型的函数,则可以将其作为通用py::object参数进行传递。

m.def("some_function",
     [](py::object obj){
         ... 
}); 

现在可以在函数中使用传递的py::object的python接口。但是我想这不是您要在C ++方面要做的。

问题出在从python-wrapper-around-c ++-object到pure-c ++-object的转换

pybind不知道所传递的包装的布局,并且无法从python对象提取纯C ++部分。当您使用不是由pybind绑定的类型时(例如gi.repository.Gst),这是正确的。

要获取py::object的C ++部分,您需要知道C ++部分所在的位置。您要么需要手动执行,要么需要其他绑定库的帮助。