c++ - Pybind11 类定义

标签 c++ class pybind11

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/

相关文章:

c++ - 有什么办法可以通过 pragma 添加源文件吗?

ios - 自定义类 "Cannot find interface declaration"中无法识别 Objective-C 类别方法

python - OpenMP/Pybind11 : Accessing python object in for loop returns interned string error

python - 如何在多线程应用程序中使用pybind11

c++ - 按 const 值返回的目的?

c++ - 生成 std​​::string 的唯一 id

python - 使用 Python watchdog 生成多个观察者

python - 通过pybind11将字符串列表从python传递给C

带有函数体的 C++ 冒号语法

c# - 如何使用 List.Distinct 来填充自定义类?