如何解决Boost.intrusive多个容器
| 在boost.intrusive文档中,它提到使用多个容器存储在一个对象中。但是,没有实际的例子,所以我做了我自己的例子。这是正确的方法吗?#include <boost/intrusive/list.hpp>
struct tag1;
class A:public list_member_hook<>,public list_member_hook<tag<tag1> >
{
}
typedef list_base_hook<tag<tag1> > TagHook;
typedef list<A> DefaultList;
typedef list<A,base_hook<TagHook> > TagList;
int main()
{
DefaultList dList;
TagList tList;
A *a = new A();
dList.push_back(a);
tList.push_back(a);
}
如果我添加另一个相同类型的容器(例如添加另一个DefaultList),它将产生错误。这是故意的吗?为什么我们不允许使用相同类型的第二个容器?
解决方法
你近了这是它的外观:
#include <boost/intrusive/list.hpp>
struct tag1;
class A:public list_base_hook<>,public list_base_hook<tag<tag1> >
{
}
typedef list_base_hook<tag<tag1> > TagHook;
typedef list<A> DefaultList;
typedef list<A,base_hook<TagHook> > TagList;
int main()
{
DefaultList dList;
TagList tList;
A *a = new A();
dList.push_back(*a);
tList.push_back(*a);
}
要继承钩子时使用2。 list_member_hook
适用于希望挂钩成为成员的情况。同样,“ 4”采用参考,而不是指针。
这是使用成员挂钩的示例:
#include <boost/intrusive/list.hpp>
class A
{
public:
list_member_hook<> m_hook1,m_hook2;
}
typedef list<A,member_hook<A,list_member_hook<>,&A::m_hook1> > List1;
typedef list<A,&A::m_hook2> > List2;
int main()
{
List1 list1;
List2 list2;
A *a = new A();
list1.push_back(*a);
list2.push_back(*a);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。