iterator_facade.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 107 行

CPP
107
字号
// Copyright David Abrahams 2004. Distributed under the Boost// Software License, Version 1.0. (See accompanying// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)// This is really an incomplete test; should be fleshed out.#include <boost/iterator/iterator_facade.hpp>#include <boost/iterator/new_iterator_tests.hpp>// This is a really, really limited test so far.  All we're doing// right now is checking that the postfix++ proxy for single-pass// iterators works properly.template <class Ref>class counter_iterator  : public boost::iterator_facade<        counter_iterator<Ref>      , int const      , boost::single_pass_traversal_tag      , Ref    >{ public:    counter_iterator() {}    counter_iterator(int* state) : state(state) {}    void increment()    {        ++*state;    }    Ref    dereference() const    {        return *state;    }    bool equal(counter_iterator const& y) const    {        return *this->state == *y.state;    }    int* state;};struct proxy{    proxy(int& x) : state(x) {}            operator int const&() const    {        return state;    }    int& operator=(int x) { state = x; return state; }            int& state;};struct value{    void mutator() {} // non-const member function};struct input_iter  : boost::iterator_facade<        input_iter      , value      , boost::single_pass_traversal_tag      , value    >{ public:    input_iter() {}    void increment()    {    }    value    dereference() const    {        return value();    }    bool equal(input_iter const& y) const    {        return false;    }};int main(){    int state = 0;    boost::readable_iterator_test(counter_iterator<int const&>(&state), 0);    state = 3;    boost::readable_iterator_test(counter_iterator<proxy>(&state), 3);    boost::writable_iterator_test(counter_iterator<proxy>(&state), 9, 7);    BOOST_TEST(state == 8);    // test for a fix to http://tinyurl.com/zuohe    // These two lines should be equivalent (and both compile)    input_iter p;    (*p).mutator();    p->mutator();        return boost::report_errors();}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?