gpt4 book ai didi

c++ - 使用 boost ptr_unordered_map

转载 作者:行者123 更新时间:2023-11-28 07:08:42 25 4
gpt4 key购买 nike

我有一个类 ItemThreadingControllerboost::ptr_unordered_map 其中键是线程的 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));

它不能工作 map 需要一个指针作为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*); .

关于c++ - 使用 boost ptr_unordered_map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21368336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com