所以我使用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"
答案 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);