c++ 返回第三方pybind类型

mfpqipee  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(145)

我的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:第三方绑定的问题可以在这里找到。在没有一个一般的答案,我也很高兴听到有关的答案,特别是库。

igetnqfo

igetnqfo1#

pybind 11中的情况与Python中的情况相同--需要先导入类,然后才能依赖它们。
在尝试将在pydrake.math.RigidTransform上操作的函数绑定定义为C参数类型或C返回值类型之前,请将py::module::import("pydrake.math");添加到PYBIND11_MODULE

相关问题