2012-05-16 175 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);