using boost ptr_unordered_map
using boost ptr_unordered_map
我有一个带有 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*);
。
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 使用一个考虑到std::map中键值的滚动或换行的键
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 允许从 std::map 的密钥窃取资源?
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 将重物插入std::map
- 使用通用值初始化 std::map,不重复
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- C++:当所有条目都保证是唯一时,替代 std::map
- 使用模板化的键类型定义 std::map,该键类型基于作为参数接收的函数
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- 使用字符数组作为 Map 中的键
- C++如何创建 std::map
- C++ equivalent to Java Map getOrDefault?
- 从其他容器中移动构造"std::map"
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- 将 std::map::emplace 与返回 shared_ptr 的函数一起使用是否正确?
- C++中 std::map 的运行时复杂度是多少?
- unordered map -在c++ std::unordered_map中预分配桶