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()
}