Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

any_range

Boost , Chapter 1. Range 2.0 , Provided Ranges

Boost C++ LibrariesHomeLibrariesPeopleFAQMore

PrevUpHomeNext
Description

> > > > > >>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>.

В статье распада освещена мотивация и цели стирания типа в этом контексте. Очевидно, что моя реализация основана на многих предшествующих искусствах, созданных другими. any_iterator оказал сильное влияние. Adobe также имеет реализацию any_iterator, но это имеет очень плотную связь с другими частями библиотеки, которая не позволяла использовать его в Boost. Диапазон. Ранние версии этого Range Adaptor непосредственно использовали исполнение Томаса Бекера. Впоследствии я обнаружил, что распределение этих и многих других реализаций приводит к низкой скорости, особенно в хвостах распределения. Для решения этого требуется новый дизайн, который включает встроенную буферную оптимизацию.

Несмотря на то, что any_iterator является самой быстрой и доступной реализацией, надбавка производительности any_range по-прежнему ценится из-за стоимости виртуальных вызовов функции, необходимых для реализации increment, decrement, advance, equal и т.д. Часто лучшим выбором дизайна является преобразование в каноническую форму.

Пожалуйста, смотрите type_erased для адаптера диапазона, который возвращает any_range экземпляры.

Synopsis

template<
    class Value
  , class Traversal
  , class Reference
  , class Difference
  , class Buffer = any_iterator_default_buffer
>
class any_range
    : public iterator_range<
        range_detail::any_iterator<
            Value
          , Traversal
          , Reference
          , Difference
          , Buffer
        >
    >
{
    typedef range_detail::any_iterator<
        Value
      , Traversal
      , Reference
      , Difference
      , Buffer
    > any_iterator_type;
    typedef iterator_range<any_iterator_type> base_type;
    struct enabler {};
    struct disabler {};
public:
    typedef any_iterator_type iterator;
    typedef any_iterator_type const_iterator;
    any_range()
    {
    }
    any_range(const any_range& other)
        : base_type(other)
    {
    }
    template<class WrappedRange>
    any_range(WrappedRange& wrapped_range)
    : base_type(boost::begin(wrapped_range),
                boost::end(wrapped_range))
    {
    }
    template<class WrappedRange>
    any_range(const WrappedRange& wrapped_range)
    : base_type(boost::begin(wrapped_range),
                boost::end(wrapped_range))
    {
    }
    template<
        class OtherValue
      , class OtherTraversal
      , class OtherReference
      , class OtherDifference
    >
    any_range(const any_range<
                        OtherValue
                      , OtherTraversal
                      , OtherReference
                      , OtherDifference
                      , Buffer
                    >& other)
    : base_type(boost::begin(other), boost::end(other))
    {
    }
    template<class Iterator>
    any_range(Iterator first, Iterator last)
        : base_type(first, last)
    {
    }
};

Definition

Defined in header file boost/range/any_range.hpp


PrevUpHomeNext

Статья any_range раздела Chapter 1. Range 2.0 Provided Ranges может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Provided Ranges ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 22:16:51/0.0065948963165283/0