如何打印通用std :: list迭代器?

马达莱纳

我希望能够std::list通过打印其值来打印任何迭代器。我的初始代码如下所示:

template<typename T>
std::ostream& operator<<(std::ostream& os, const typename std::list<T>::const_iterator& x)
{
   return os << "&" << *x;
}

哪个没有用,因为编译器无法确定参数T然后,我尝试使它在迭代器类型本身上具有通用性,并iterator_traits用于将其限制为迭代器。

template<
    typename It,
    typename = typename std::iterator_traits<It>::value_type
>
std::ostream &operator<<(std::ostream &os, const It &x)
{
    return os << "&" << *x;
}

但是,当然,我得到了两个冲突的实现std::ostream << *const char,因为指针也是迭代器。如何将实现限制为std::list迭代器,以免发生冲突?

songyuanyao

您可以约束类型iteratorconst_iteratorstd::list例如

template<typename It>
std::enable_if_t<std::is_same_v<It, typename std::list<typename std::iterator_traits<It>::value_type>::iterator> ||
                 std::is_same_v<It, typename std::list<typename std::iterator_traits<It>::value_type>::const_iterator>
                 , std::ostream &> 
operator<<(std::ostream &os, const It &x) {
    return os << "&" << *x;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用迭代器C ++打印std :: list的元素

来自分类Dev

std :: list中支持迭代器的对象

来自分类Dev

如何接受通用迭代器?

来自分类Dev

带有迭代器的std :: map从std :: map的迭代器到std :: list

来自分类Dev

使用反向迭代器插入std :: list会更改原始反向迭代器的值

来自分类Dev

如果列表为空,则std list反向迭代器的过去迭代器无效

来自分类Dev

std :: list-迭代器在移动时是否无效?

来自分类Dev

std :: forward_list-用存储的迭代器擦除

来自分类Dev

C ++通用迭代器

来自分类Dev

如何嵌套迭代器?

来自分类Dev

如何拆分迭代器?

来自分类Dev

如何实现迭代器?

来自分类Dev

如何实现迭代器?

来自分类Dev

检查std :: list迭代器是否在末尾而无法访问容器

来自分类Dev

将initializer_list插入到std :: vector时出现“无效的迭代器范围”

来自分类Dev

如何将默认迭代器写入通用列表?

来自分类Dev

如何迭代几个范围或迭代器的乘积?

来自分类Dev

如何使用asyncio迭代阻塞迭代器?

来自分类Dev

如何遍历String List的映射(使用迭代器)并使用InputArray的值加载另一个String List?

来自分类Dev

我们如何将 List<String> 值存储在 Iterator<List<String>> 之类的迭代器中?

来自分类Dev

c ++迭代器列出通用函数

来自分类Dev

如何组成可变的迭代器?

来自分类Dev

如何指定特征的迭代器?

来自分类Dev

如何构造容器的迭代器

来自分类Dev

迭代器的比较程度如何?

来自分类Dev

如何复制R的迭代器

来自分类Dev

如何匹配迭代器的项目?

来自分类Dev

如何比较迭代器的内部和迭代器的外部

来自分类Dev

如何通过推进std :: map迭代器来停止for循环?

Related 相关文章

热门标签

归档