2013-03-03 42 views
0

C++ 11中是否有简单/优雅的方式通过STL或boost来创建元素类型“智能”,以使其实例始终知道它属于哪个容器,以及有一些“自动清除”的成员函数,它也负责更新它所属的容器?“智能”元素的挂钩

真实情况是,我有一个回调C函数(来自C库)在给定请求完成后被调用。这个函数接受一个原始指针指向已被处理的元素。现在我想要的是从它所属的列表中移除该元素,并将其移至另一个列表。

我知道我可以在元素本身存储指向容器的指针,并且在调用回调函数时,我可以遍历该容器直到找到元素,然后将其删除并调用newlist.push_back(object)。鉴于一个元素必须存在于一个容器中(只有一个),我不知道是否有更优雅的东西。

+2

你是什么意思的“自动清除”?你想拥有弱指针的cachemap? – 2013-03-03 21:01:53

+0

我能想到的唯一合理用例就是将原始指针指向该项目的某个其他代码,该代码应该能够删除该项目。对于那种用例,我建议改为发布一个智能指针,比如'std :: shared_ptr'。然后在你的容器中放置一个这样的智能指针的容器。 – 2013-03-03 21:10:41

回答

1

Boost的​​实现该功能。

但是,这需要特定的容器以及专门设计用于处理容器的对象。

+0

是否有可能将一个元素push_back()到一个新的boost :: intrusive :: list,以便它最终还是从任何旧的侵入列表中删除元素的存在? – Martin 2013-03-03 21:34:10

+0

我想我可以实现我想要的boost :: intrusive通过解除链接和push_back()到一个新的列表。 – Martin 2013-03-03 21:46:45