using boost ptr_unordered_map

using boost ptr_unordered_map

本文关键字:unordered map ptr boost using      更新时间:2023-10-16

我有一个带有 boost::ptr_unordered_map的类ItemThreadingController,其中键是线程的 id,值是带有某些任务的 boost::thread。我想添加并删除线程。基本上,它是原始线程管理器。

问题是 - 使用ptr_unordered_map的正确方法是什么来声明并访问其元素?当我尝试这样的时候

class ItemThreadingController
{
private:
boost::ptr_unordered_map<int, boost::thread> controllerMap;
long int id;
public:
ItemThreadingController() 
{
    id = -1;
}
int AddThread(void (*func)())
{
    boost::thread t(func);
    id++;
    controllerMap.insert(std::make_pair(id, t));
    return id;
}
void StopThread(long int id)
{
    controllerMap[id].interrupt();
    controllerMap[id].join();
    controllerMap.erase(id);
    cout<<"Thread "<<id<<"has stopped and erased!"<<endl;
}
~ItemThreadingController() {};
};

我有几个错误

error C2664: 'void boost::ptr_map_adapter<T,VoidPtrMap,CloneAllocator,Ordered>::insert<boost::type>(InputIterator,InputIterator)' : cannot convert parameter 1 from 'boost::type' to 'boost::type'  518
error C2664: 'boost::ptr_map_iterator<I,F,S> boost::ptr_container_detail::associative_ptr_container<Config,CloneAllocator>::erase(boost::ptr_map_iterator<I,F,S>,boost::ptr_map_iterator<I,F,S>)' : cannot convert parameter 1 from 'boost::type' to 'boost::ptr_map_iterator<I,F,S>'   185
error C2039: 'type' : is not a member of 'boost::mpl::eval_if_c<C,F1,F2>'   63
error C2039: 'type' : is not a member of 'boost::mpl::eval_if_c<C,F1,F2>'   63

如何正确使用它?

boost::ptr_unordered_map<A, B>可以看作是 std::unordered_map<A, std::unique_ptr<B>>等效的。它旨在简化删除和元素删除的内存管理。

这样做时:

boost::thread t(func);
id++;
controllerMap.insert(std::make_pair(id, t));

它无法使用地图期望指针作为pair::second

此外,我不确定boost::ptr_XXX模拟std::XXXX,并且我认为没有boost::ptr_unordered_map<A, B>::insert()超载服用std::pair<A, B*>。但是至少您有一个过载boost::ptr_unoreder_map<A, B>::insert(A&, B*);