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

(Переменная последовательность)

Описание:

Переменная последовательность является элементом семейства классов последовательностей с двумя формами: переменной и пронумерованной. Если seq является обобщенным именем для некоторой переменной последовательности, его переменная форма позволяет задавать последовательность из n элементов: t1, t2, ... tn, для любого n от 0 до значения макроса BOOST_MPL_LIMIT_seq_SIZE, используя следующие обозначения:

seq<t1, t2, ... tn>

В отличие от этого, каждая пронумерованная форма поддерживает точное количество элементов, которые закодированы в название соответствующего шаблон класса:

seqn<t1, t2, ... tn>

Для пронумерованной формы нет предопределенного верхнего предела для n, кроме допустимого количества шаблонных параметров конкретным компилятором.

Требования к выражениям:

В следующей таблице и спецификациях, seq является меткой-заполнителем (placeholder) для текущего имени переменной последовательности.

Выражение

Тип

Сложность

seq<t1, t2, ... tn>

Forward Sequence

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

seq<t1, t2, ... tn>::type

Forward Sequence

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

seqn<t1, t2, ... tn>

Forward Sequence

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

seqn<t1, t2, ... tn>::type

Forward Sequence

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

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

typedef seq<t1, t2, ... tn> s;

typedef seqn<t1, t2, ... tn> s;

Семантика: s это последовательность элементов t1, t2, ... tn.

Постусловие:

size<s>::value == n.

typedef seq<t1, t2, ... tn> s;

typedef seqn<t1, t2, ... tn> s;

Семантика: s идентична

seqn<t1, t2, ... tn>

Постусловие:

size<s>::value == n.

Модели:

  • vector

  • list

  • set

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

Sequences, Configuration, Integral Sequence Wrapper

Классы

MPL содержит большое количество классов последовательностей общего назначения, охватывающих большинство типичных задач метапрограммирования.

vector

Описание:

Вектор является последовательностью (переменной, произвольного доступа, расширяемой) типов, поддерживающей постоянное время вставки и удаления

элементов на обоих концах, и линейное время вставки и удаления элементов в середине. На компиляторах, которые поддерживают расширение typeof, вектор является самой простой и во многих случаях наиболее эффективной последовательностью.

Заголовок:

Форма последовательности

Заголовочный файл

Variadic

#include <boost/mpl/vector.hpp>

Numbered

#include <boost/mpl/vector/vectorn.hpp>

Модель:

  • Variadic Sequence

  • Random Access Sequence

  • Extensible Sequence

  • Back Extensible Sequence

  • Front Extensible Sequence

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

В следующей таблице, v - экземпляр вектора, pos и last - итераторы в v, r – прямая последовательность, n - интегральная константа, а х и t1, t2, ... tn - произвольные типы.

Выражение

Семантика

vector<t1, t2, ... tn> vectorn<t1, t2, ... tn>

Вектор из t1, t2, ... tn элементов;

Смотри Variadic Sequence.

vector<t1, t2, ... tn>::type vectorn<t1, t2, ... tn>::type

Идентично vectorn<t1, t2, ... tn>;

Смотри Variadic Sequence.

begin<v>::type

Итератор указывает на начало v; смотри Random Access Sequence.

end<v>::type

Итератор указывает на конец v; смотри Random Access Sequence.

size<v>::type

Размер v; смотри Random Access Sequence.

empty<v>::type

Булева интегральная константа с, для которой

c::value == true, если и только если последовательность пуста (empty).смотри Random Access Sequence.

front<v>::type

Первый элемент в v; смотри Random Access Sequence.

back<v>::type

Последний элемент в v; смотри Random Access Sequence.

at<v,n>::type

n-ый элемент от начала v; смотри Random Access Sequence.

insert<v,pos,x>::type

Новый vector из следующих элементов:

[begin<v>::type, pos), x,[pos, end<v>::type);

смотри Extensible Sequence.

insert_range<v,pos,r>::type

Новый vector из следующих элементов:

[begin<v>::type, pos),[begin<r>::type, end<r>::type),

[pos, end<v>::type);

смотри Extensible Sequence.

erase<v,pos>::type

Новый vector из следующих элементов:

[begin<v>::type, pos),[next<pos>::type, end<v>::type);

смотри Extensible Sequence.

erase<v,pos,last>::type

Новый vector из следующих элементов:

[begin<v>::type, pos),[last, end<v>::type);

смотри Extensible Sequence.

clear<v>::type

Пустой (empty) vector; смотри Extensible Sequence.

push_back<v,x>::type

Новый vector из следующих элементов:

[begin<v>::type, end<v>::type), x;

смотри Back Extensible Sequence.

pop_back<v>::type

Новый vector из следующих элементов:

[begin<v>::type, prior<end<v>::type>::type);

смотри Back Extensible Sequence.

push_front<v,x>::type

Новый vector из следующих элементов:

[begin<v>::type,end<v>:: type), x;

смотри Front Extensible Sequence.

pop_front<v>::type

Новый vector из следующих элементов:

[next< begin<v>::type>::type, end<v>::type);

смотри Front Extensible Sequence.

Пример:

int main()

{

typedef mpl::vector<int, float, double> floats;

cout << typeid(floats::item2).name() << endl;

typedef mpl::push_back<floats,int>::type types;

BOOST_MPL_ASSERT((boost::is_same<mpl::at_c<types,3>::type, int>));

cout << typeid(types::item3).name() << endl;

return 0;

}

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

Sequences, Variadic Sequence, Random Access Sequence, Extensible Sequence, vector_c, list

list

Описание:

Список является последовательностью (переменной, прямой, расширяемой) типов, поддерживающей постоянное время вставки и удаления элементов в начале, и линейное время вставки и удаления элементов в конце и в середине.

Заголовок:

Форма последовательности

Заголовочный файл

Variadic

#include <boost/mpl/list.hpp>

Numbered

#include <boost/mpl/list/listn.hpp>

Модель:

  • Variadic Sequence

  • Forward Sequence

  • Extensible Sequence

  • Front Extensible Sequence

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

В следующей таблице, l - экземпляр списка, pos и last - итераторы в l, r – прямая последовательность, х и t1, t2, ... tn - произвольные типы.

Выражение

Семантика

list<t1, t2, ... tn> listn<t1, t2, ... tn>

Список из t1, t2, ... tn элементов;

Смотри Variadic Sequence.

list<t1, t2, ... tn>::type listn<t1, t2, ... tn>::type

Идентично listn<t1, t2, ... tn>;

Смотри Variadic Sequence.

begin<l>::type

Итератор указывает на начало l; смотри Forward Sequence.

end<l>::type

Итератор указывает на конец l; смотри Forward Sequence.

size<l>::type

Размер l; смотри Forward Sequence.

empty<l>::type

Булева интегральная константа с, для которой

c::value == true, если и только если последовательность пуста (empty). смотри Forward Sequence.

front<l>::type

Первый элемент в l; смотри Forward Sequence.

insert<l,pos,x>::type

Новый list из следующих элементов:

[begin<l>::type, pos), x,[pos, end<l>::type);

смотри Extensible Sequence.

insert_range<l,pos,r>::type

Новый list из следующих элементов:

[begin<l>::type, pos),[begin<r>::type, end<r>::type),

[pos, end<l>::type);

смотри Extensible Sequence.

erase<l,pos>::type

Новый list из следующих элементов:

[begin<l>::type, pos),[next<pos>::type, end<l>::type);

смотри Extensible Sequence.

erase<l,pos,last>::type

Новый list из следующих элементов:

[begin<l>::type, pos),[last, end<l>::type);

смотри Extensible Sequence.

clear<l>::type

Пустой (empty) list; смотри Extensible Sequence.

push_front<l,x>::type

Новый list, в котором x является первым элементом:

смотри Front Extensible Sequence.

pop_front<l>::type

Новый list из всех элементов без первого:

смотри Front Extensible Sequence.

Пример:

#include <boost\mpl\list.hpp>

#include <boost\mpl\push_front.hpp>

#include <boost\assert.hpp>

#include <boost\mpl\at.hpp>

#include <boost\mpl\front.hpp>

using namespace boost;

int main()

{

typedef mpl::list<int, float, double> floats;

cout << typeid(mpl::at<floats, mpl::int_<2>>::type).name() << endl;

typedef mpl::push_front<floats, int>::type types;

BOOST_MPL_ASSERT((boost::is_same<mpl::front<types>::type, int>));

cout << typeid(mpl::at<types, mpl::int_<2>>::type).name() << endl;

return 0;

}

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

Sequences, Variadic Sequence, Forward Sequence, Extensible Sequence, vector, list_c

deque

Описание:

Двухсторонняя очередь - последовательность (переменной, произвольного доступа, расширяемой) типов, которая поддерживает постоянное время вставки и удаления элементов с обоих концов, и линейное время вставки и удаления элементов в середине. В этой реализации библиотеки, двухсторонняя очередь - синоним вектора.

Заголовок:

#include <boost/mpl/deque.hpp>

Модель:

  • Variadic Sequence

  • Random Access Sequence

  • Extensible Sequence

  • Back Extensible Sequence

  • Front Extensible Sequence

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

Смотри спецификации vector.

Пример:

#include <boost\mpl\deque.hpp>

#include <boost\mpl\push_back.hpp>

#include <boost\assert.hpp>

#include <boost\mpl\at.hpp>

using namespace boost;

int main()

{

typedef mpl::deque<int, float, double> floats;

cout << typeid(floats::item2).name() << endl;

typedef mpl::push_back<floats,int>::type types;

BOOST_MPL_ASSERT((boost::is_same<mpl::at_c<types,3>::type, int>));

cout << typeid(types::item3).name() << endl;

return 0;

}

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

Sequences, vector, list, set.

set

Описание:

Множество - последовательность (переменная, ассоциативная, расширяемая) типов, поддерживающая постоянное время вставки и удаления элементов, проверяет наличие элементом в множестве. Множество может содержать не более одного элемента для каждого ключа.

Заголовок:

Форма последовательности

Заголовочный файл

Variadic

#include <boost/mpl/set.hpp>

Numbered

#include <boost/mpl/set/setn.hpp>

Модель:

  • Variadic Sequence

  • Associative Sequence

  • Extensible Associative Sequence

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

В следующей таблице, s - экземпляр множества, pos - итераторы в s, а k, х и t1, t2, ... tn - произвольные типы.

Выражение

Семантика

set<t1, t2, ... tn>

setn<t1, t2, ... tn>

Множество из t1, t2, ... tn элементов;

Смотри Variadic Sequence.

set <t1, t2, ... tn>::type setn<t1, t2, ... tn>::type

Идентично setn<t1, t2, ... tn>;

Смотри Variadic Sequence.

begin<s>::type

Итератор указывает на начало s; смотри Associative Sequence.

end<s>::type

Итератор указывает на конец s; смотри Associative Sequence.

size<s>::type

Размер s; смотри Associative Sequence.

empty<s>::type

Булева интегральная константа с, для которой

c::value == true, если и только если s пуст (empty).смотри Random Access Sequence.

front<s>::type

Первый элемент в s; смотри Associative Sequence.

has_key<s,k>::type

Булевская интегральная константа c, для которой c::value == true, если и только если, есть один или больше элементов, с ключом (key) k в s; смотри Associative Sequence.

count<s,k>::type

Количество элементов с ключом (key) k в s; смотри Associative Sequence.

order<s,k>::type

Уникальная беззнаковая интегральная константа, ассоциированная с ключом (key) k в s;

смотри Associative Sequence.

at<s,k>::type

at<s,k,def>::type

Первый элемент, ассоциированный с ключом (key) k в s; смотри Associative Sequence.

key_type<s,x>::type

Ключ (key) для элемента x, используемый для идентификации x в s;

value_type<s,x>::type

Значение (value) для элемента x, используемый для x в s;

insert<s,x>::type

Новый set эквивалентный s, кроме

at<t, key_type<s,x>::type>::type

что идентично value_type<s,x>::type.

insert<s,pos,x>::type

Эквивалентно insert<s,x>::type; pos игнорируется.

erase_key<s,k>::type

Новый set эквивалентный s, кроме has_key<t, k>::value == false.

erase<v,pos>::type

Эквивалентно erase<s, deref<pos>::type>::type.

clear<v>::type

Пустой (empty) set;

Пример:

#include <boost\mpl\set.hpp>

#include <boost\assert.hpp>

#include <boost\mpl\size.hpp>

#include <boost\mpl\empty.hpp>

#include <boost\mpl\at.hpp>

#include <boost\mpl\key_type.hpp>

using namespace boost;

int main()

{

typedef mpl::set<int,long,double,mpl::int_<5>> s;

BOOST_MPL_ASSERT_RELATION(mpl::size<s>::value, ==, 4);

BOOST_MPL_ASSERT_NOT((mpl::empty<s>));

BOOST_MPL_ASSERT((boost::is_same<mpl::at<s,int>::type, int > ));

BOOST_MPL_ASSERT((boost::is_same<mpl::at<s,long>::type, long > ));

BOOST_MPL_ASSERT((boost::is_same<mpl::at<s,mpl::int_<5>>::type, mpl::int_<5>>));

BOOST_MPL_ASSERT((boost::is_same<mpl::at<s,char>::type, mpl::void_>));

return 0;

}

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

Sequences, Variadic Sequence, Associative Sequence, Extensible Associative Sequence, set_c, map, vector

map

Описание:

Карта является последовательностью (переменной, произвольного доступа, расширяемой) типов, поддерживающей постоянное время вставки и удаления элементов, проверяет наличие элементом в карте. Карта может содержать не более одного элемента для каждого ключа.

Заголовок:

Форма последовательности

Заголовочный файл

Variadic

#include <boost/mpl/map.hpp>

Numbered

#include <boost/mpl/map/mapn.hpp>

Модель:

  • Variadic Sequence

  • Associative Sequence

  • Extensible Associative Sequence

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

В следующей таблице и спецификациях, m - экземпляр map, pos - итератор в map, х и p1, p2,…pn являются парами (pairs), а к - произвольный тип.

Выражение

Семантика

map<p1, p2, ... pn> mapn<p1, p2, ... pn>

Карта из p1, p2, ... pn элементов;

Смотри Variadic Sequence.

map<p1, p2, ... pn>::type mapn<p1, p2, ... pn>::type

Идентично mapn<p1, p2, ... pn>;

Смотри Variadic Sequence.

begin<m>::type

Итератор указывает на начало m;

смотри Associative Sequence.

end<m>::type

Итератор указывает на конец m;

смотри Associative Sequence.

size<m>::type

Размер m; смотри Associative Sequence.

empty<m>::type

Булева интегральная константа с, для которой

c::value == true, если и только если m пуст (empty). смотри Associative Sequence.

front<m>::type

Первый элемент в m; смотри Associative Sequence.

has_key<m,k>::type

Булевская интегральная константа c, для которой c::value == true, если и только если, есть один или больше элементов, с ключом (key) k в m; смотри Associative Sequence.

count<m,k>::type

Количество элементов с ключом (key) k в m; смотри Associative Sequence.

order<m,k>::type

Уникальная беззнаковая интегральная константа, ассоциированная с ключом (key) k в m; смотри Associative Sequence.

at<m,k>::type

at<m,k,def>::type

Первый элемент, ассоциированный с ключом (key) k в m; смотри Associative Sequence.

key_type<m,x>::type

Идентично x::first в m; смотри Associative Sequence.

value_type<m,x>::type

Идентично x::second в m; смотри Associative Sequence.

insert<s,x>::type

Новый map эквивалентный m, кроме

at<t, key_type<m,x>::type>::type

что идентично value_type<m,x>::type.

insert<m,pos,x>::type

Эквивалентно insert<m,x>::type; pos игнорируется.

erase_key<m,k>::type

Новый map эквивалентный m, кроме has_key<t, k>::value == false.

erase<m,pos>::type

Эквивалентно erase<m, deref<pos>::type>::type.

clear<m>::type

Пустой (empty) map;

Пример:

int main()

{

typedef mpl::map<

mpl::pair<int, unsigned>,

mpl::pair<char, unsigned char>,

mpl::pair<mpl::long_<5>, char[17]>,

mpl::pair<int[42], bool>

> m;

BOOST_MPL_ASSERT_RELATION(mpl::size<m>::value, ==, 4);

BOOST_MPL_ASSERT_NOT(( mpl::empty<m> ));

BOOST_MPL_ASSERT((boost::is_same<mpl::at<m,int>::type, unsigned > ));

BOOST_MPL_ASSERT((boost::is_same<mpl::at<m,mpl::long_<5>>::type, char[17]>));

BOOST_MPL_ASSERT((boost::is_same<mpl::at<m,int[42]>::type, bool > ));

BOOST_MPL_ASSERT((boost::is_same<mpl::at<m,long>::type, mpl::void_>));

return 0;

}

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

Sequences, Variadic Sequence, Associative Sequence, Extensible Associative Sequence, set, vector

range_c

Формат:

template<

typename T,

T Start,

T Finish

>

struct range_c

{

typedef integral_c<T,Start> start;

typedef integral_c<T,Finish> finish;

// unspecified

// ...

};

Описание:

Range_c - отсортированная последовательность произвольного доступа из интегральных констант. Поскольку данная последовательность не является расширяемой, то нельзя использовать напрямую метафункции, создающие последовательности, такие push_front и алгоритмы преобразования, такие как replace, для их использования, необходимо скопировать содержимое диапазона в более подходящую последовательность.

Заголовок:

#include <boost/mpl/range_c.hpp>

Модель:

  • Random Access Sequence

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

В следующей таблице, r - экземпляр range_c, T – произвольный интегральный тип, n и m – значения интегральных констант типа Т.

Выражение

Семантика

range_c<T,n,m>

range_c<T,n,m>::type

Отсортированная последовательность произвольного доступа из оберток для интегральных констант с полуоткрытым диапазоном значений [n, m):

integral_c<T,n>, integral_c<T,n+1>,... integral_c<T,m-1>.

begin<r>::type

Итератор указывает на начало r; смотри Random Access Sequence.

end<r>::type

Итератор указывает на конец r; смотри Random Access Sequence.

size<r>::type

Размер r; смотри Random Access Sequence.

empty<r>::type

Булева интегральная константа с, для которой

c::value == true, если и только если r пуст (empty).смотри Random Access Sequence.

front<r>::type

Первый элемент в r; смотри Random Access Sequence.

back<r>::type

Последний элемент в r; смотри Random Access Sequence.

at<v,n>::type

n-ый элемент от начала r; смотри Random Access Sequence.

Пример:

int main()

{

typedef mpl::range_c<int,0,0> range0;

typedef mpl::range_c<int,0,1> range1;

typedef mpl::range_c<int,0,10> range10;

BOOST_MPL_ASSERT_RELATION(mpl::size<range0>::value, ==, 0 );

BOOST_MPL_ASSERT_RELATION(mpl::size<range1>::value, ==, 1 );

BOOST_MPL_ASSERT_RELATION(mpl::size<range10>::value, ==, 10 );

BOOST_MPL_ASSERT((mpl::empty<range0> ));

BOOST_MPL_ASSERT_NOT((mpl::empty<range1> ));

BOOST_MPL_ASSERT_NOT((mpl::empty<range10> ));

BOOST_MPL_ASSERT((boost::is_same<mpl::begin<range0>::type, mpl::end<range0>::type>));

BOOST_MPL_ASSERT_NOT((boost::is_same<mpl::begin<range1>::type, mpl::end<range1>::type>));

BOOST_MPL_ASSERT_NOT((boost::is_same<mpl::begin<range10>::type, mpl::end<range10>::type>));

BOOST_MPL_ASSERT_RELATION(mpl::front<range1>::type::value, ==, 0 );

//BOOST_MPL_ASSERT_RELATION(mpl::back<range1>::type::value, ==, 0 ); // ошибка компиляции

BOOST_MPL_ASSERT_RELATION(mpl::front<range10>::type::value, ==, 0 );

//BOOST_MPL_ASSERT_RELATION(mpl::back<range10>::type::value, ==, 9 ); // ошибка компиляции

return 0;

}

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

Sequences, Random Access Sequence, vector_c, set_c, list_c

vector_c

Описание:

Vector_c – обертка интегральной последовательности для vector. Vector_c разделяет все характеристики и требования vector, и отличается только способом определения исходной последовательности.

Заголовок:

Форма последовательности

Заголовочный файл

Variadic

#include <boost/mpl/vector_c.hpp>

Numbered

#include <boost/mpl/vector/vectorn_c.hpp>

Модель:

  • Integral Sequence Wrapper

  • Variadic Sequence

  • Random Access Sequence

  • Extensible Sequence

  • Back Extensible Sequence

  • Front Extensible Sequence

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

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

Выражение

Семантика

vector_c<T,c1, c2,... cn> vectorn_c<T,c1, c2,... cn>

Вектор из интегральных константных оберток

integral_c<T,c1>, integral_c<T,c2>, ... integral_c<T,cn>;

смотри Integral Sequence Wrapper.

vector_c<T,c1, c2,... cn>::type vectorn_c<T,c1, c2,... cn>::type

Идентично vectorn<integral_c<T,c1>,

integral_c<T,c2>, ... integral_c<T,cn>>;

смотри Integral Sequence Wrapper.

vector_c<T,c1, c2,... cn>::value_type vectorn_c<T,c1, c2,... cn>::value_type

Идентично Т;

смотри Integral Sequence Wrapper.

Пример:

#include <boost\mpl\vector_c.hpp>

#include <boost\mpl\push_back.hpp>

#include <boost\assert.hpp>

#include <boost\mpl\at.hpp>

#include <boost\mpl\front.hpp>

#include <boost\mpl\back.hpp>

using namespace boost;

int main()

{

typedef mpl::vector_c<int,1,2,3,5,8,13,21,34> fibonacci;

typedef mpl::push_back<fibonacci,mpl::int_<55>>::type fibonacci2;

BOOST_MPL_ASSERT_RELATION(mpl::front<fibonacci2>::type::value, ==, 1 );

BOOST_MPL_ASSERT_RELATION(mpl::back<fibonacci2>::type::value, ==, 55 );

return 0;

}

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

Sequences, Integral Sequence Wrapper, vector, integral_c, set_c, list_c, range_c

list_c

Описание:

List_c – обертка интегральной последовательности для list. List_c разделяет все характеристики и требования list, и отличается только способом определения исходной последовательности.

Заголовок:

Форма последовательности

Заголовочный файл

Variadic

#include <boost/mpl/list_c.hpp>

Numbered

#include <boost/mpl/list/listn_c.hpp>

Модель:

  • Integral Sequence Wrapper

  • Variadic Sequence

  • Forward Sequence

  • Extensible Sequence

  • Front Extensible Sequence

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

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

Выражение

Семантика

list_c<T,c1, c2,... cn> listn_c<T,c1, c2,... cn>

Список из интегральных константных оберток

integral_c<T,c1>, integral_c<T,c2>, ... integral_c<T,cn>;

смотри Integral Sequence Wrapper.

list_c<T,c1, c2,... cn>::type listn_c<T,c1, c2,... cn>::type

Идентично listn<integral_c<T,c1>,

integral_c<T,c2>, ... integral_c<T,cn>>;

смотри Integral Sequence Wrapper.

list_c<T,c1, c2,... cn>::value_type listn_c<T,c1, c2,... cn>::value_type

Идентично Т;

смотри Integral Sequence Wrapper.

Пример:

#include <boost\mpl\list_c.hpp>

#include <boost\mpl\push_front.hpp>

#include <boost\assert.hpp>

#include <boost\mpl\front.hpp>

using namespace boost;

int main()

{

typedef mpl::list_c<int,1,2,3,5,8,13,21,34> fibonacci;

typedef mpl::push_front<fibonacci,mpl::int_<1>>::type fibonacci2;

BOOST_MPL_ASSERT_RELATION(mpl::front<fibonacci2>::type::value, ==, 1 );

return 0;

}

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

Sequences, Integral Sequence Wrapper, list, integral_c, vector_c, set_c, range_c

set_c

Описание:

Set_c – обертка интегральной последовательности для set. Set_c разделяет все характеристики и требования set, и отличается только способом определения исходной последовательности.

Заголовок:

Форма последовательности

Заголовочный файл

Variadic

#include <boost/mpl/set_c.hpp>

Numbered

#include <boost/mpl/set/setn_c.hpp>

Модель:

  • Variadic Sequence

  • Associative Sequence

  • Extensible Associative Sequence

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

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

Выражение

Семантика

set_c<T,c1, c2,... cn> setn_c<T,c1, c2,... cn>

Множество из интегральных константных оберток

integral_c<T,c1>, integral_c<T,c2>, ... integral_c<T,cn>;

смотри Integral Sequence Wrapper.

set_c<T,c1, c2,... cn>::type setn_c<T,c1, c2,... cn>::type

Идентично setn<integral_c<T,c1>,

integral_c<T,c2>, ... integral_c<T,cn>>;

смотри Integral Sequence Wrapper.

set_c<T,c1, c2,... cn>::value_type setn_c<T,c1, c2,... cn>::value_type

Идентично Т;

смотри Integral Sequence Wrapper.

Пример:

#include <boost\assert.hpp>

#include <boost\mpl\set_c.hpp>

#include <boost\mpl\push_front.hpp>

#include <boost\mpl\size.hpp>

#include <boost\mpl\empty.hpp>

#include <boost\mpl\integral_c.hpp>

#include <boost\mpl\has_key.hpp>

using namespace boost;

int main()

{

typedef mpl::set_c<int,1,3,5,7,9> odds;

BOOST_MPL_ASSERT_RELATION(mpl::size<odds>::value, ==, 5 );

BOOST_MPL_ASSERT_NOT((mpl::empty<odds> ));

BOOST_MPL_ASSERT((mpl::has_key< odds, mpl::integral_c<int,5> > ));

BOOST_MPL_ASSERT_NOT((mpl::has_key< odds, mpl::integral_c<int,4> > ));

BOOST_MPL_ASSERT_NOT((mpl::has_key< odds, mpl::integral_c<int,15> > ));

return 0;

}

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

Sequences, Integral Sequence Wrapper, set, integral_c, vector_c, list_c, range_c

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