我在想,用户定义的容器要与Range-v3(算法...)一起使用有什么新要求?
例如,我们需要在设计中更改什么(成员类型、成员函数...)在标准意义上?如何遵守Range-v3算法的概念?我们需要提供哪些成员函数?迭代器有哪些变化?
迭代器/begin/end的替代品是什么?
template<typname T>
struct container
{
//...
using value_type = T;
//...
using iterator = value_type*;
using const_iterator = const value_type*;
//...
iterator begin() { //... }
//...
};如果有人能给出一个规范的容器实现,那就太好了。
Range-v3带来了哪些新的想法/概念?新的C++编码方式是什么?
发布于 2017-04-07 16:07:08
据我所知,范围本身只需要有返回有效迭代器的begin和end成员。迭代器可能更难正确处理。据我所知,最弱的迭代器(即需要最少成员的迭代器)需要以下成员:
operator =operator ++ (在pre和post forms)operator *operator ==operator !=std::iterator的适当实例化,因此它有正确的类型成员可用--虽然这在C++17中已被弃用,因此您可能更喜欢手动添加类型。你可以静态地断言这些概念,这应该会帮助你弄清楚你需要什么:
static_assert(ranges::Iterator<my_iterator>(), "Not Iterator");https://stackoverflow.com/questions/41530677
复制相似问题