Boost.Python 对象的 id

Posted

技术标签:

【中文标题】Boost.Python 对象的 id【英文标题】:Boost.Python id of object 【发布时间】:2011-05-10 01:03:38 【问题描述】:

如何在 boost python 中获取 python 对象的 id。我希望有类似的东西

boost::python::obj = ...;
int id = boost::python::id(obj);

【问题讨论】:

【参考方案1】:

来自 Python documentation,在 CPython 中,返回的值是对象的地址。所以,如果你在 Boost Python 中寻找类似的东西:

boost::python::api::object obj = ...;
long id = static_cast<long>(obj.ptr());

粗略浏览一下源代码;内置 id 函数的实现(我正在查看 2.6.4)仅仅是:

static PyObject *
builtin_id(PyObject *self, PyObject *v)

    return PyLong_FromVoidPtr(v);

【讨论】:

谢谢,这对我来说已经足够好了。我只需要可以快速散列的东西,我可以散列ptr()

以上是关于Boost.Python 对象的 id的主要内容,如果未能解决你的问题,请参考以下文章

Boost.Python 返回一个不可复制对象的列表

Boost.Python 从 C++ 创建对现有 Python 对象的新引用

复制 boost.python 对象

Boost python,使用命名空间调用函数对象

通过 Boost Python 在 C++ 对象之间传递共享指针的 Segfault

减少 Boost Python 编译时间