首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

ForwardIterator和OutputInterator不兼容,该如何处理

2012-05-04 
ForwardIterator和OutputInterator不兼容C/C++ code__uninitialized_fill_n_aux函数的返回值类型是Forward

ForwardIterator和OutputInterator不兼容

C/C++ code
__uninitialized_fill_n_aux函数的返回值类型是ForwardIteratortemplate <class ForwardIterator, class Size, class T>inline ForwardIterator__uninitialized_fill_n_aux(ForwardIterator first, Size n,   const T& x, __true_type) {  return fill_n(first, n, x);}//迭代器类型是OutIterator,注意:输出迭代器和前向迭代器无关。这里返回的类型是不是匹配了?????不匹配,为什么代码要这么写?????非常奇怪template <class OutputIterator, class Size, class T>OutputIterator fill_n(OutputIterator first, Size n, const T& value) {  for ( ; n > 0; --n, ++first)    *first = value;  return first;}template <class ForwardIterator, class Size, class T>ForwardIterator  __uninitialized_fill_n_aux(ForwardIterator first, Size n,    const T& x, __false_type) {  ForwardIterator cur = first;  __STL_TRY {    for ( ; n > 0; --n, ++cur)      construct(&*cur, x);   //构造 return cur;  }  __STL_UNWIND(destroy(first, cur)); //析构}//__STL_UNWIND这个宏表示什么意思,这是定义#   define __STL_UNWIND(action) catch(...) { action; throw; }一般catch括号中必须注明异常的类型。结果它定义的宏中没有定义。,这是什么异常用法,从来没见过



2 个问题,高手帮忙忙



[解决办法]
iterator_category 是使用了一种类型萃取技术, 提取类型后利用重载或者偏特化的方法对某种特殊的类型做优化处理.

传递模板类型参数编译器无法做什么检测, sort 仅支持随机迭代器, 但是你传递一个非随机的迭代器进去, 编译器也无法检测到然后提示你, 你传递的参数不是随机迭代器.
而是在 sort 函数的实现里面使用到了 - 这个操作时, 编译器才发现你传进去的参数不支持 operator -, 并提示错误.

热点排行