是否有文档描述了boost list_of
internally如何转换为其他集合?
具体而言,adapter_converter
和converter
填充隐式转化过程的角色。
答案 0 :(得分:1)
我找不到关于list_of
内部的文件。
以下是list_of
的简化版本。
可能实现细节在不同之间会有所不同
版本,但我想基本过程大致如下。
问题的关键,转换到其他集合是
用模板化转换函数实现。
修改强>:
无法构造/分配像std::stack/queue
这样的IIRC适配器容器
从一个范围。
因此,to_adapter
会返回adapter_converter
而不是构建。{1}}
目标容器直接。
adapter_converter
中的模板化转换函数构造了
带push
的适配器容器
至于班级converter
,根据我的理解,这是一种混合。
它用于隐藏细节并在某种程度上提供抽象。
但是,我认为这与问题的重点无关
(直接转换为多个馆藏。)
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 ≷
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();
}
希望这有帮助