Pybind11 Class Definition



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

(1(

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

(二(

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

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

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

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

最新更新