gpt4 book ai didi

c++ - boost的 `list_of`如何转换为其他集合?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:35:08 26 4
gpt4 key购买 nike

是一个文档,描述了 boost 的 list_of internally 是如何工作的转换为其他集合?

具体来说,adapter_converterconverter是哪个角色来填充隐式转换过程的。

最佳答案

我找不到有关 list_of 内部结构的文档。下面是 list_of 的非常简化的版本。不同的实现细节可能会有所不同版本,但我想基本过程大致如下。问题的重点,转换为其他集合是用模板转换函数实现。

编辑:IIRC 适配器容器,如 std::stack/queue 无法构造/分配从一个范围。因此,to_adapter 返回一个 adapter_converter 而不是构造目标容器直接。adapter_converter 中的模板化转换函数构造了带有 push 的适配器容器。
至于类converter,我的理解是一种mix-in。它用于隐藏细节并在某种程度上提供抽象。但是,我认为它与问题的重点没有太大关系(转换为多个集合)直接。

template< class T >
struct generic_list {
typedef std::deque< T > converter;
converter values_;

generic_list& operator()( T const& u ) {
values_.push_back( u );
return *this;
}

template< class Container >
operator Container() const { // conversion function
return Container( values_.begin(), values_.end() );
}

struct adapter_converter {
converter const &gl;

adapter_converter( converter const& gl ) : gl( gl ) {}

template< class Adapter >
operator Adapter() const { // conversion function for adapter
Adapter a;
converter::const_iterator i = gl.begin(), e = gl.end();
for ( ; i != e; ++ i ) a.push( *i );
return a;
}
};

adapter_converter to_adapter() const {
return adapter_converter( values_ );
}
};

template< class T >
generic_list<T> list_of( T const& t ) {
return generic_list<T>()( t );
}

int main() {
std::stack< int > s = list_of(1)(2).to_adapter();
std::queue< int > q = list_of(3)(4).to_adapter();
}

希望对你有帮助

关于c++ - boost的 `list_of`如何转换为其他集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5822723/

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