boost的"list_of"如何转换为其他系列?
How does boost's `list_of` converts to other collections?
是否有文档描述boost的list_of
如何在内部转换为其他集合?
具体来说,adapter_converter
和converter
在隐式转换过程中扮演什么角色?
我找不到关于list_of
内部的文档。下面是list_of
的简化版本。可能实现细节之间会有不同的区别版本,但我想基本过程大致如下。问题的关键是,转换到其他集合是使用模板化转换函数实现。
编辑:像std::stack/queue
这样的IIRC适配器容器不能被构造/分配从一个范围。因此,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 ≷
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();
}
希望能有所帮助
相关文章:
- 无法将模板子类强制转换为其他模板实例化
- 从 int 中剥离位时,编译器会警告一个转换,但不警告其他转换.有解决方法吗?
- 如何定义此"if block"中其他无效输入的值,以便在c ++中将字符串转换为对象?
- isdigit() 和 isalnum() 给出错误,因为输入是一个常量字符并且无法转换。其他可能查看输入是否为数字的方法?
- 为什么可以将所有类型转换为其他指针类型?
- 驾驶执照考试计划.无法将 std:: 字符串转换为 std :: 字符串和其他错误
- Catch2 迫使我在异常中添加对 std::string 的强制转换,这会产生其他问题吗?
- 如何将 QImage 中的像素数据转换为其他格式
- 创建可相互转换的模板类系列
- OpenCV将一种颜色转换为任何其他颜色
- 我可以铸造/将模板转换为其他模板类型
- 旨在复制/转换对象的功能系列的模板
- 无法转换某些类,但其他类可以.C++
- C++ 将时间 ET 转换为 CET 或其他内容
- 如果 JVM 的参数是从其他类型的转换而来的,JNI 找不到该类
- C++ 将部分数组(在某些偏移量)转换为其他类型
- 我应该采取什么方法来将ascii字符转换为c++中的其他字符
- 为什么我不能在窗口上使用 boost::locale::conv::between 将 UTF-16 文本转换为其他编码
- 如何检查Void指针是否可以转换为其他特定的指针类型
- boost的"list_of"如何转换为其他系列?