C++ 钩;“聪明的”;元素

C++ 钩;“聪明的”;元素,c++,boost,c++11,C++,Boost,C++11,在C++11中,是否有简单/优雅的方法,通过STL或boost,使元素类型“智能”,以便它的实例始终知道它属于哪个容器,并具有某种“自动删除”的成员函数,该函数还负责更新它所属的容器 实际情况是,在给定的请求完成后,我调用了一个回调C函数(来自C库)。此函数接受指向已处理元素的原始指针。现在我想从它所属的列表中删除这个元素,并将其移动到另一个列表中 我知道我可以在元素本身中存储一个指向容器的指针,当调用回调时,我可以迭代该容器,直到找到元素,然后删除它并调用newlist.push_back(o

在C++11中,是否有简单/优雅的方法,通过STL或boost,使元素类型“智能”,以便它的实例始终知道它属于哪个容器,并具有某种“自动删除”的成员函数,该函数还负责更新它所属的容器

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

我知道我可以在元素本身中存储一个指向容器的指针,当调用回调时,我可以迭代该容器,直到找到元素,然后删除它并调用
newlist.push_back(object)
。考虑到一个元素必须存在于一个容器中(并且只有一个),我想知道是否还有更优雅的东西。

Boost实现了该功能


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

什么是“自动移除”?你想拥有弱指针的cachemap吗?我能想到的唯一合理的用例是,将指向该项的原始指针交给其他代码,这些代码应该能够删除该项。对于这个用例,我建议使用智能指针,比如
std::shared\u ptr
。然后,使用您的容器创建一个包含此类智能指针的容器。是否有可能将一个元素向后推到一个新的boost::intrusive::list中,从而最终将该元素从任何旧的入侵列表中删除?我想我可以通过取消链接并向后推到一个新列表来实现我想要的boost::intrusive。