【发布时间】:2012-02-21 11:40:31
【问题描述】:
Python C API 有PyObject *PyType_Type 对象,相当于解释器中的type。如果我想在 C++ 中定义一个元类,我如何将type 设置为它在 Boost.Python 中的基础之一?另外,在 C++ 中定义 Python 元类时我还应该考虑哪些其他事项?
如果有 Boost.Python 解决方案,那就太理想了。如果没有,使用 Python C API(或 Boost 和 C API 的组合)的解决方案也很好。由于我的其他类都暴露在 Boost 中,所以我宁愿将 SWIG 作为最后的手段。
注意:这实际上是我试图解决的一个更大问题的一部分,如果你有兴趣,我已经在Setting metaclass of wrapped class with Boost.Python 中询问过这个问题。
【问题讨论】:
-
您只是在寻找 Boost.Python 解决方案吗?我想我可以用 SWIG 解决这个问题 :)
-
@awoodland Boost.Python 更可取,但我不反对 SWIG。
-
好的,如果你没有得到一个好的 Boost.Python 答案,请 ping 我,用另一个 @ 提醒我,我会看看用 SWIG 做的。
-
我不确定这是否可能仅使用 c++ 作为 boost python 已经将公开类型的元类设置为 Boost::Python::class。您也许可以在 c++ 中编写一个具有 new 方法的类,然后将其用作 python 中的元类。
-
@babak 这已经足够了™,但暴露的元类仍然必须继承自 Python 的
type的等效项。
标签: c++ python python-3.x boost-python metaclass