我正在使用Python C API并尝试创建一个函数,该函数将分配PyTypeObjects的新实例以在多个C ++类中使用。我们的想法是每个类都有一个指向PyTypeObject的指针,该指针将通过此工厂进行实例化。指针必须是静态的。 但是,我遇到了这种方法的问题。
希望这是有道理的。基本上,我正在努力使它成为几个类不必静态重新定义PyTypeObject,而是可以从工厂函数实例化它们的PyTypeObject变量。
答案 0 :(得分:0)
试试这个:创建一个'模板'PyTypeObject,并使用struct replication(或memcpy)来克隆基本模板。然后,您可以在此之后使用必要的字段定义填充它。这解决了(2),因为你只需要声明一次完整的PyTypeObject。
关于第一点,您只需从模块init设置静态变量,而不是在静态变量声明中进行。因此,在模块实际初始化之前,它不会被设置。
如果您打算经常这样做,可能值得一看Boost :: Python,这简化了从C ++类生成CPython包装器的过程。