我有一個boost :: ptr_vector包含指向類「holdable」的指針。如何擦除「this」from boost :: ptr_vector
boost::ptr_vector<holdable> items;
我從可保持類中添加新的項目到這種載體是這樣的:
currentplanet->items.push_back(this);
其中currentplanet是指向包含ptr_vector的類的對象。這很好。
我很困惑的是如何從它自己的類中的函數中從ptr_vector中刪除條目。我想:
currentplanet->items.erase(std::find(currentplanet->items.begin(),
currentplanet->items.end(),
this));
如按照回答類似的問題在這裏:How to erase elements from boost::ptr_vector,但我已經很明顯了問題的地方,可能對於使用的「本」。
在嘗試編譯,我收到來自stl_algo.h說
stl_algo.h|174|error: no match for 'operator==' in '__first.boost::void_ptr_iterator<VoidIter, T>::operator*
[with VoidIter = __gnu_cxx::__normal_iterator<void**, std::vector<void*, std::allocator<void*> > >,
T = holdable]() == __val'|
我敢肯定,這東西很明顯,但我可能得到的ptr_vector的間接混淆...感謝任何答案錯誤提前!
你的設計在任何情況下都是有缺陷的,我想。一個'ptr_vector' *擁有*中的指針。如果你已經有了'this',那麼* else *擁有這個對象。將它添加到'ptr_vector'是沒有意義的。只需使用'std :: vector'作爲所有事物的非擁有參考。 –
Xeo