range-v3 доступ к внутренним объектам курсора - PullRequest
0 голосов
/ 20 ноября 2018

В библиотеке c ++ range-v3.

Возможно ли получить доступ к внутренним данным курсора (из view_facade)?

class range_t : public ranges::view_facade<range_t>
{
    friend ranges::range_access;

    struct cursor {
        cursor() = default;
        cursor(FlatMultiMap& self, std::size_t index)
            : self(&self)
            , index(index)
        {}

        // other implementation stuff
    private:
        // I want to get this data from outside cursor class
        FlatMultiMap* self;
        std::size_t   index;
    };

    cursor begin_cursor() const
    {
        return { *self, index };
    }
    cursor end_cursor() const
    {
        return { *self, end_index };
    }

    FlatMultiMap* self;
    std::size_t   index;
    std::size_t   end_index;

public:
    range_t() = default;
    range_t(FlatMultiMap& self, std::size_t index, std::size_t end_index)
        : self(&self)
        , index(index)
        , end_index(end_index)
    {}

    template<class I, class S>
    range_t(I iterator, S sentinel)
    {
         // how to do this?
         iterator.self  // Error
    }

};

Если нет - range-v3 предоставляет что-то вроде https://www.boost.org/doc/libs/1_68_0/libs/iterator/doc/iterator_facade.html?

1 Ответ

0 голосов
/ 17 декабря 2018

Чтобы получить доступ к внутренним данным курсора, нужно использовать миксин курсора.

Теперь задокументировано https://ericniebler.github.io/range-v3/ в разделе «Создание пользовательских итераторов».

...