C++ 使用boost::container或boost::recursive_包装器创建不完整类型的容器

C++ 使用boost::container或boost::recursive_包装器创建不完整类型的容器,c++,boost,incomplete-type,C++,Boost,Incomplete Type,我需要创建一个结构,将向量作为成员变量。Boost提供了两种实现此目的的机制: 1-使用boost::recursive_wrapper即: struct filter { uint32_t id; std::vector< boost::recursive_wrapper< filter > > childFilters; }; struct filter { uint32_t id; boost::container::vector

我需要创建一个结构,将
向量
作为成员变量。Boost提供了两种实现此目的的机制:

1-使用
boost::recursive_wrapper
即:

struct filter
{
    uint32_t id;
    std::vector< boost::recursive_wrapper< filter > > childFilters; 
};
struct filter
{
    uint32_t id;
    boost::container::vector< filter > childFilters; 
};

每种技术都有什么优势吗?第二个
boost::container
选项涉及的语法更少,我猜它在内部使用了类似于
boost::recursive\u包装器的技术。

更好的选择是使用
boost::container::vector
,因为它允许直接访问存储在vector中的类型

boost::recursive_wrapper
提供了额外的间接层,允许声明
std::vector
使得代码操作向量更加麻烦,因为访问所持有的实际类型需要
get

i、 e

struct filter
{
    uint32_t id;
    std::vector< boost::recursive_wrapper< filter > > childFilters; 
};

filter myFilter;

// fill myFilter .....

BOOST_FOREACH( boost::recursive_wrapper< filter > f, myFilter.childFilters )
{
    std::cout << f.get().id << "\n";
}
struct filter
{
    uint32_t id;
    boost::container::vector< filter > childFilters; 
};

filter myFilter;

// fill myFilter .....

BOOST_FOREACH( boost::recursive_wrapper< filter > f, myFilter.childFilters )
{
    std::cout << f.id << "\n";    // no call to get()
}