gpt4 book ai didi

c++ - 过滤模板函数的特定迭代器

转载 作者:太空宇宙 更新时间:2023-11-04 12:08:08 25 4
gpt4 key购买 nike

我正在开发一组函数,这些函数利用具有打包和顺序内存存储(用于内存拷贝)的容器。它们具有大多数 STD 函数风格的函数签名,输入/输出迭代器指向元素并表示范围。例如,一个函数可能如下所示:

template< typename InputIterator, typename OutputIterator >
OutputIterator fooBar( InputIterator& first, InputIterator& last,
OutputIterator& result );

我想验证传递的迭代器是否合法,即打包的和顺序的。对于 STD 容器,这仅限于 std::vector 和 std::array。不幸的是,我不能依赖迭代器的“类别”特征,因为随机访问特征并不意味着顺序存储。这方面的一个例子是微软的 concurrent_vector 类,记录在此处 parallel containers

此外,我也不能接受来自 vector 和数组类的所有迭代器,例如我需要拒绝反向迭代器和 std::vector <bool > 迭代器不适合,因为它使用代理类。

我试图创建我自己的特征类来区分和过滤具有我上面描述的约束的迭代器,但我遇到了模板语法问题。我正在寻找其他人关于他们将如何解决这个问题的反馈。

谢谢

最佳答案

我不认为你能做到这一点。迭代器是一种抽象,其全部目的是使迭代过程独立于底层架构。标准迭代器中没有任何信息表示底层内存结构或任何类似的东西。

在类似于标准算法的函数中,通常建议按值传递迭代器,因为它们应该是便宜的/小的对象。应该特别注意的是,您的函数将永远无法被称为 fooBar(c.begin(), c.end(), some_out_it); ,因为它通过对非常量的引用获取输入迭代器。

作为最后一点,您可以通过测试迭代器类型是否是 std::reverse_iterator<Iter> 的特化来过滤掉反向迭代器。 , 因为至少 Container::(const_)reverse_iterator标准容器的类型必须是一种。

关于c++ - 过滤模板函数的特定迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11064481/

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