pybind11中以下类定义有什么区别?
(1)
py::class_<Pet> pet(m, "Pet");
(2)
py::class_<Pet>(m, "Pet")
pet(m, "Pet")
中的 pet
有什么用?我在文档的第 42 页“5.8 枚举和内部类型”部分找到了这个定义,可以在 here 找到。 。
最佳答案
第一个创建一个命名变量,您稍后可以在同一范围内引用该变量(如您引用的示例中所做的那样),第二个创建一个(未命名)临时变量,您只能通过链接该函数调用来使用该临时变量在同一语句上设置更多属性。如果变量没有转义局部作用域,那么唯一的区别是语法。否则,通过命名它,您可以将其传递给一个或多个辅助函数(例如,用于分解公共(public)属性的定义)。
重要的是要理解所有 Python 类、函数等都是运行时构造。 IE。需要调用一些 Python API 代码来创建它们,例如在加载模块时。 py::class_
的对象调用 API 来创建 Python 类并注册一些类型信息以供内部 pybind11
使用(例如用于稍后的转换)。 IE。它只是创建所请求的 Python 类的方法,而不是该类本身。一旦创建了 Python 类并存储了其类型信息,就不再需要配方对象,并且可以安全地销毁它(例如,通过让它超出范围来进行 b/c)。
关于c++ - Pybind11 类定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59973926/