1

所以我std::map<KeyType, std::shared_ptr<ValueType>>使用map_indexing_suite.

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

我的问题是,我怎样才能以一种可以将该引用与共享指针进行比较的方式将原始指针公开给 python?像这样的东西:

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

1 回答 1

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);
于 2012-05-16T16:53:29.620 回答