gpt4 book ai didi

c++ - Boost.intrusive 多容器

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:05:29 25 4
gpt4 key购买 nike

在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);
}

list_base_hook 用于继承hook。 list_member_hook 适用于您希望 Hook 成为成员的情况。此外,push_back 采用引用,而不是指针。

这是一个使用成员钩子(Hook)的例子:

#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, member_hook<A, list_member_hook<>, &A::m_hook2> > List2;

int main()
{
List1 list1;
List2 list2;
A *a = new A();
list1.push_back(*a);
list2.push_back(*a);
}

关于c++ - Boost.intrusive 多容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6174083/

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