Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 实施运营商->;在一系列适配器中';s迭代器类 让我们考虑一个非常基本的范围适配器类,它围绕一个范围,在遍历适配器时迭代原来范围的每个元素。 for (const auto & e : everyOtherElement(originalRange))_C++_C++11_Iterator_Range_Adaptor - Fatal编程技术网

C++ 实施运营商->;在一系列适配器中';s迭代器类 让我们考虑一个非常基本的范围适配器类,它围绕一个范围,在遍历适配器时迭代原来范围的每个元素。 for (const auto & e : everyOtherElement(originalRange))

C++ 实施运营商->;在一系列适配器中';s迭代器类 让我们考虑一个非常基本的范围适配器类,它围绕一个范围,在遍历适配器时迭代原来范围的每个元素。 for (const auto & e : everyOtherElement(originalRange)),c++,c++11,iterator,range,adaptor,C++,C++11,Iterator,Range,Adaptor,在编写这样一个范围适配器类时,需要为该适配器编写一个相应的迭代器类,以使其具有可移植性并按照所需的方式运行 例如,这样的迭代器类应该实现您希望它支持的“概念”所需的一切。除此之外,我们应该实现operator*来返回对所表示元素的引用,以及operator->以便it->member访问该元素的成员 我认为简单地将这些操作符“转发”到适配器围绕的底层迭代器的实现是一个好主意(让我们暂时忘记常量): 请参阅标准迭代器适配器规范,例如: 他们将指针类型定义为迭代器,实际上是由操作符->定义的,因为我

在编写这样一个范围适配器类时,需要为该适配器编写一个相应的迭代器类,以使其具有可移植性并按照所需的方式运行

例如,这样的迭代器类应该实现您希望它支持的“概念”所需的一切。除此之外,我们应该实现
operator*
来返回对所表示元素的引用,以及
operator->
以便
it->member
访问该元素的成员

我认为简单地将这些操作符“转发”到适配器围绕的底层迭代器的实现是一个好主意(让我们暂时忘记常量):


请参阅标准迭代器适配器规范,例如:


他们将
指针
类型定义为
迭代器
,实际上是由操作符
->

定义的,因为我假设涉及到模板,我建议只使用SFINAE/tag dispatch来选择实现,这取决于原始迭代器是否为指针。
struct everyOtherElement {
    OriginalIterator b, e; // The begin and end we wrap around
    // ...
    struct iterator {
        OriginalIterator it;
        auto operator*() { return *it; }                  // <------
        auto operator->() { return it.operator->(); }     // <------
        // ...
    };
};
        auto operator->() { return it; }
pointer     Iterator