Нет, но boost::shared_container_iterator
настолько прост (почти вся работа выполняется с помощью boost::iterator_adaptor
), что вы должны быть в порядке, чтобы скопировать его в свою собственную служебную библиотеку, изменив boost::shared_ptr
на std::shared_ptr
( и обновление стиля кодирования):
template<class Container>
class shared_container_iterator :
public boost::iterator_adaptor<shared_container_iterator<Container>, typename Container::iterator>
{
std::shared_ptr<Container> ref;
public:
shared_container_iterator() = default;
shared_container_iterator(typename Container::iterator x, std::shared_ptr<Container> c) :
shared_container_iterator::iterator_adaptor(x), ref(std::move(c)) {}
};
template<class Container>
auto make_shared_container_range(std::shared_ptr<Container> const& container) {
return boost::make_iterator_range(
shared_container_iterator{container->begin(), container},
shared_container_iterator{container->end(), container});
}
Обратите внимание, что здесь по-прежнему используется Boost.IteratorAdaptor , но это хорошо для использования в современном C ++.
Пример . * * 1014