2012-05-16 82 views
1

所以我有一个std::map<KeyType, std::shared_ptr<ValueType>>暴露给python使用map_indexing_suiteBoost python,将原始指针与托管指针进行比较?

在我店使用原始指针,ValueType*在地图上的ValueType对象的引用代码等地,因为这些容器没有自己的ValueType对象,地图一样。

我的问题是,我怎样才能暴露原始指针到Python的方式,它可以比较该共享指针的引用?就像这样:

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

在C++中,这将是'&*'。 '*'将一个共享指针变成对它指向的对象的引用。 '&'将引用转换为它引用的对象的地址。 –

回答

1

自己找到答案。

首先定义了两个方法:

​​ 在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);