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