Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
template_metaprogramming_ru.docx
Скачиваний:
12
Добавлен:
01.07.2025
Размер:
774 Кб
Скачать
☆

Инсертеры (инсертер: механизм вставок)

back_inserter

Фомрат:

template<typename Seq>

struct back_inserter

{

// unspecified

// ...

};

Описание:

Осуществляет вставку элементов в конец последовательности.

Заголовок:

#include <boost/mpl/back_inserter.hpp>

Модель:

  • Inserter

Параметры:

Выражение

Требование

Описание

Seq

Расширяемая последовательность конца

Последовательность для связывания с инсертером.

Семантика выражений:

Поддерживает семантику, определенную для инсертера, добавляет отличные/не определенные выражения.

Для любой расширяемой последовательности конца s:

Выражение

Семантика

back_inserter<s>

Инсертер in эквивалентен

struct in : inserter<s,push_back<_1,_2>>{};

Сложность:

Амортизированное постоянное время.

Пример:

int main()

{

typedef mpl::copy<

mpl::range_c<int,5,10>,

mpl::back_inserter<mpl::vector_c<int,0,1,2,3,4>>

>::type range;

BOOST_MPL_ASSERT((mpl::equal< range, mpl::range_c<int,0,10> > ));

return 0;

};

Смотри также:

Algorithms, Inserter, Reversible Algorithm, inserter, front_inserter, push_back

front_inserter

Фомрат:

template<typename Seq>

struct front_inserter

{

// unspecified

// ...

};

Описание:

Осуществляет вставку элементов в начало последовательности.

Заголовок:

#include <boost/mpl/front_inserter.hpp>

Модель:

  • Inserter

Параметры:

Выражение

Требование

Описание

Seq

Расширяемая последовательность начала

Последовательность для связывания с инсертером.

Семантика выражений:

Поддерживает семантику, определенную для инсертера, добавляет отличные/не определенные выражения.

Для любой расширяемой последовательности начала s:

Выражение

Семантика

front_inserter<s>

Инсертер in эквивалентен

struct in : inserter<s, push_front<_1,_2>>{};

Сложность:

Амортизированное постоянное время.

Пример:

int main()

{

typedef mpl::reverse_copy<

mpl::range_c<int,0,5>,

mpl::front_inserter<mpl::vector_c<int,5,6,7,8,9>>

>::type range;

BOOST_MPL_ASSERT((mpl::equal< range, mpl::range_c<int,0,10> > ));

return 0;

};

Смотри также:

Algorithms, Inserter, Reversible Algorithm, inserter, back_inserter, push_front

inserter

Фомрат:

template

<

typename State,

typename Operation

>

struct inserter

{

typedef State state;

typedef Operation operation;

};

Описание:

Модель общего назначения для концепции инсертера.

Заголовок:

#include <boost/mpl/inserter.hpp>

Модель:

  • Inserter

Параметры:

Выражение

Требование

Описание

State

Любой тип

Исходное состояние.

Operation

Бинарное лямбда-выражение

Операция вывода.

Семантика выражений:

Поддерживает семантику, определенную для инсертера, добавляет отличные/не определенные выражения.

Для любого бинарного лямбда-выражения op и произвольного типа state:

Выражение

Семантика

inserter<op,state>

Инсертер

Сложность:

Амортизированное постоянное время.

Пример:

template<typename N>

struct is_odd

: mpl::bool_<( N::value % 2 )>

{};

int main()

{

typedef mpl::copy<

mpl::range_c<int,0,10>,

mpl::inserter< // a filtering ’push_back’ inserter

mpl::vector<>,

mpl::if_<

is_odd<mpl::_2>,

mpl::push_back<mpl::_1, mpl::_2>,

mpl::_1

>

>

>::type odds;

BOOST_MPL_ASSERT

((

mpl::equal<

odds,

mpl::vector_c<int,1,3,5,7,9>,

mpl::equal_to<mpl::_, mpl::_>

>

));

return 0;

}

Смотри также:

Algorithms, Inserter, Reversible Algorithm, front_inserter, back_inserter

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]