Iterator trait with iterator返回包装器对象

时间:2016-08-13 10:32:31

标签: c++ iterator wrapper traits

我想设计一个返回包装器的迭代器,如下所示:

        VarArgReference operator*() const
        {
            return VarArgReference(state_, stack_index_);
        }
        VarArgReference operator->() const
        {
            return VarArgReference(state_, stack_index_);
        }

现在我想定义迭代器特征,例如来自std::iterator。我所知道的:这是一个InputIterator(只读对象)。但我希望它也支持随机访问功能。

所以一步一步:对于InputIterator,我需要*i返回“reference,convertible to value_type”。所以我可以简单地设置reference = value_type = VarArgReference。

下一步是前进迭代器。但是http://en.cppreference.com/w/cpp/concept/ForwardIterator说“std :: iterator_traits :: reference必须完全是[...] const T& [for OutputIterator](它是常量),(其中T是由std :: iterator_traits ::表示的类型) VALUE_TYPE)“

那会是什么?我的reference现在真的const VarArgReference&了吗?这意味着我需要返回那种类型,一个const&到一个右值。什么时候使用pointer?我需要将其设为const VarArgReference*还是VarArgReference

其他问题:ForwardIterator必须默认可构造。这意味着我需要用某些东西初始化状态(无效?)并且可能在取消引用时检查并捕获它。或者它只是未定义的行为,我可以省略检查?

注意:如果这很重要,C ++ 98和C ++ 11需要使用它

注意2:在C ++ 17中不推荐使用std::iterator,这建议明确定义嵌套的typedef(请参阅注释)。因此,从std::iterator派生只有可能性来定义那些,但不应该使用它们。

0 个答案:

没有答案