gpt4 book ai didi

python - PyTypeObject 的静态工厂

转载 作者:行者123 更新时间:2023-11-30 17:58:37 25 4
gpt4 key购买 nike

我正在使用 Python C API 并尝试创建一个函数,该函数将分配 PyTypeObjects 的新实例以在多个 C++ 类中使用。这个想法是每个类都有一个指向 PyTypeObject 的指针,该指针将使用该工厂实例化。指针必须是静态的。但是,我对这种方法有疑问。

  1. 在包含 PyTypeObject 指针的类中,当我尝试将该静态变量设置为等于工厂函数(位于另一个类中但是静态的)的结果时,出现“ undefined reference ”链接器错误。我认为这是有道理的,因为该函数直到运行时才会发生,但我不知道另一种方法可以做到这一点。
  2. 我不知道如何动态设置 PyTypeObject 字段,因为第一个字段始终是宏:PyObject_VAR_HEAD。

希望这是有道理的。基本上,我试图让几个类不必静态地重新定义 PyTypeObject,而是可以从工厂函数实例化它们的 PyTypeObject 变量。

最佳答案

试试这个:创建一个"template"PyTypeObject,并使用结构复制(或 memcpy)来克隆基本模板。然后您可以填写必要的字段定义。这解决了 (2),因为您只需声明一次完整的 PyTypeObject。

对于第一点,您只需从模块初始化中设置静态变量,而不是在静态变量声明中进行设置。因此,在模块实际初始化之前它不会被设置。

如果您打算经常这样做,那么 Boost::Python 可能值得一看,它简化了从 C++ 类生成 CPython 包装器的过程。

关于python - PyTypeObject 的静态工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12098554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com