Итератор для кода, который принимает только обратный вызов - PullRequest
0 голосов
/ 06 апреля 2019

У меня есть библиотека C, которую я хочу использовать в C ++ (17). Библиотека внутренне отслеживает сложную структуру данных, и, как только кандидат найден, вызывает обратный вызов через

    CALLBACK(candidate);

CALLBACK является макросом и может быть переопределен по желанию, так что пользователь теперь может выполнить вычисление с найденным candidate.

Вместо непосредственного запуска пользовательского кода в CALLBACK я хочу добавить в библиотеку слой абстракции для соответствия структурам данных STL, обеспечивающим итераторы. Прямой итератор достаточен для моих целей; таким образом, я могу использовать его, по крайней мере, в некоторых алгоритмах STL, требующих итератор.

Более конкретно, я хочу объект Library, который позволяет мне писать

    for (auto it = Library.begin(); it != Library.end(); ++it) {
        const auto& candidate = *it;
        ...
    }

Есть ли идиоматический способ сделать это?

Merci!

...