Как перебрать контейнер, у которого нет начала / конца? - PullRequest
0 голосов
/ 18 июня 2019

(C ++ 98, gcc4.4.7) Допустим, у меня есть контейнер, связанный с базой данных, который не предоставляет итераторы над собой, а только индексированный getter и size (), например:

template<typename T>
class DbVector
{
public:
  const T& getValue(const size_t) const;
  size_t size() const;
};

Я бы хотел использовать его в алгоритмах на основе диапазона. Это звучит как общая проблема. Предоставляет ли Boost решение для этого?

Я немного изучил Boost.Iterator и Boost.Range, но безуспешно. Я даже не уверен, как сформулировать мой запрос Google, чтобы найти что-нибудь полезное.

Я подумал, что, может быть, есть библиотека, которая позволит что-то вроде:

typedef Iterable<DbVector<int>,
                 &DbVector<int>::getValue,
                 &DbVector<int>::size>
        IterableDbVectorInt;

const DbVector<int>& dbVector = getDbVector();
return boost::any_of_equal(IterableDbVectorInt(dbVector), someValue);

Я знаю, что мог бы написать это сам с нуля, но я действительно стараюсь не изобретать велосипед.

Какие-нибудь идеи, основанные на бусте?

...