提升python,比较原始指针与托管指针?

时间:2012-05-16 04:52:24

标签: c++ python boost

所以我使用std::map<KeyType, std::shared_ptr<ValueType>>map_indexing_suite公开了python。

在代码的其他地方,我使用原始指针ValueType存储对地图中ValueType*个对象的引用,因为这些容器不拥有ValueType个对象,地图确实。

我的问题是,如何将原始指针暴露给python,以便能够将该引用与共享指针进行比较?像这样:

valueRef = getRawReference()
for x in myMap:
    if x.data() == valueRef:
        print "match"

1 个答案:

答案 0 :(得分:1)

自己找到答案。

首先定义两个方法:

bool eq(std::shared_ptr<ValueType> lhs, ValueType* rhs)
{
    return lhs.get() == rhs;
}

bool neq(std::shared_ptr<ValueType> lhs, ValueType* rhs)
{
    return lhs.get() != rhs;
}

然后在你的BOOST_PYTHON_MODULE:

bp::def("getRawReference", getRawReference, bp::return_value_policy<bp::reference_existing_object>())

bp::class_<ValueType, std::shared_ptr<ValueType>>("ValueType")
    .def("__eq__", eq)
    .def("__neq__", neq);