【发布时间】:2012-06-19 08:07:41
【问题描述】:
我正在开发一组函数,这些函数利用具有打包和顺序内存存储(用于内存副本)的容器。它们具有大多数 STD 函数风格的函数签名,输入/输出迭代器指向元素并表示范围。例如,一个函数可能如下所示:
template< typename InputIterator, typename OutputIterator >
OutputIterator fooBar( InputIterator& first, InputIterator& last,
OutputIterator& result );
我希望验证传递的迭代器是否合法,即打包和顺序。对于 STD 容器,这仅限于 std::vector 和 std::array。不幸的是,我不能依赖迭代器“类别”特征,因为随机访问特征并不意味着顺序存储。这方面的一个例子是 microsofts concurrent_vector 类,记录在这里 parallel containers
此外,我也不能接受向量和数组类中的所有迭代器,例如我需要拒绝反向迭代器,而 std::vector<bool> 迭代器不适合,因为它使用了代理类.
我试图创建自己的特征类来区分和过滤具有我上面描述的约束的迭代器,但我遇到了模板语法问题。我正在寻找其他人关于他们如何解决这个问题的反馈。
谢谢
【问题讨论】:
-
您还需要注意
value_type。只有 POD 可以是memcpy'd。通常,大多数标准库已经尝试将std::copy优化为memmove,您为什么不直接使用它呢? -
这个库的性质是给定 POD 的。它带有域。如果有人感兴趣,我可以详细说明,但我尽量笼统地陈述我的问题。