我的C库依赖于具有自己绑定的第三方C库。
我绑定了一个struct
,它使用def_readwrite
来公开它的成员,其中一个成员是来自第三方库的类型。
基本上我有:
struct MyStruct {
ClassFromThirdParty member{};
}
py::class_<MyStruct>(m, "MyStruct")
.def_readwrite("member", &MyStruct::member)
在Python中,我尝试:
from my_bindings import MyStruct
obj = MyStruct()
print(obj.member)
但这增加了TypeError: Unable to convert function return value to a Python type!
。
还值得注意的是,如果我这样做:
import ThirdPartyLibrary
from my_bindings import MyStruct
obj = MyStruct()
print(obj.member)
但是我不喜欢这个解决方案,因为Python用户即使没有明确地需要ThirdPartyLibrary
,也必须导入它。
如何编写绑定,使第一个Python代码段能够工作?
PS:第三方绑定的问题可以在这里找到。在没有一个一般的答案,我也很高兴听到有关的答案,特别是库。
1条答案
按热度按时间igetnqfo1#
pybind 11中的情况与Python中的情况相同--需要先导入类,然后才能依赖它们。
在尝试将在
pydrake.math.RigidTransform
上操作的函数绑定定义为C参数类型或C返回值类型之前,请将py::module::import("pydrake.math");
添加到PYBIND11_MODULE
。