Pybind11 Class 定义

Pybind11 Class Definition

pybind11 中的以下 class 定义有什么区别?

(1)

py::class_<Pet> pet(m, "Pet");

(2)

py::class_<Pet>(m, "Pet")

petpet(m, "Pet")中有什么用?我在文档的第 42 页“5.8 枚举和内部类型”部分找到了这个定义,可以找到 here

第一个创建一个命名变量,您稍后可以在同一范围内引用它(就像您引用的示例中所做的那样),第二个创建一个(未命名的)临时变量,您只能通过链接函数来使用它在同一语句上设置更多属性的调用。如果变量没有脱离局部作用域,那么唯一的区别就是语法。否则,通过命名它,您可以将它传递给一个或多个辅助函数(例如,用于分解出公共属性的定义)。

重要的是要理解所有 Python classes、函数等都是 运行-time 构造。 IE。需要调用一些 Python API 代码来创建它们,例如在加载模块时。 py::class_ 的对象调用 API 来创建 Python class 并注册一些类型信息以供内部 pybind11 使用(例如,稍后进行转换) . IE。它只是创建请求的 Python class 的方法,而不是 class 本身。一旦创建了 Python class 并存储了它的类型信息,配方对象就不再需要并且可以安全地销毁(例如 b/c 让它超出范围)。