![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Functionality for "empty" seqs and tuplesBoost , Chapter 1. The Variadic Macro Data Library 1.9 , Useful variadic macros not in Boost PP
|
Макро |
Параметр |
Возвращение |
Функциональность |
Заголовок |
---|---|---|---|---|
Boost_VMD_ARRAY_TO_SEQ |
массив = массив Boost PP |
A VMD seq |
Преобразует массив в VMD seq. Если массив пуст, то seq пуст, в противном случае преобразование будет таким же, как BOOST_PP_ARRAY_TO_SEQ. |
boost/vmd/array/to_seq.hpp |
Boost_VMD_ARRAY_TO_TUPLE |
массив = массив Boost PP |
Кортеж VMD |
Преобразует массив в кортеж VMD. Если массив пуст, то кортеж пуст, в противном случае преобразование будет таким же, как в BOOST_PP_ARRAY_TO_TUPLE. |
boost/vmd/array/to_tuple.hpp |
Разница между макросами преобразования массивов и их эквивалентами в Boost PP заключается в том, что если массив пуст, макросы VMD возвращают пустоту, тогда как макросы Boost PP имеют UB.
Вы можете включить макросы массива, используя их отдельные файлы заголовка, общий файл заголовка «boost/vmd/array.hpp» для всех макросов массива или общий файл заголовка «boost/vmd/vmd.hpp» для всех макросов.
Макросы списка обеспечивают конверсии из списка в VMD seq или VMD tuple. Список макросов:
Table 1.2. List macros
Макро |
Параметр |
Возвращение |
Функциональность |
Заголовок |
---|---|---|---|---|
Boost_VMD_LIST_TO_SEQ |
список = список повышения PP |
A VMD seq |
Преобразует список в VMD seq. Если список пуст, сек пуст, в противном случае конверсия будет такой же, как BOOST_PP_LIST_TO_SEQ. |
boost/vmd/list/to_seq.hpp |
Boost_VMD_LIST_TO_TUPLE |
список = список повышения PP |
Кортеж VMD |
Преобразует список в кортеж VMD. Если список пуст, кортеж пуст, в противном случае преобразование будет таким же, как BOOST_PP_LIST_TO_TUPLE. |
boost/vmd/list/to_tuple.hpp |
Разница между макросами преобразования списка и их эквивалентами в Boost PP заключается в том, что если список пуст, макросы VMD возвращают пустоту, тогда как макросы Boost PP имеют UB.
Вы можете включить макросы списка, используя их отдельные файлы заголовка, общий файл заголовка «boost/vmd/list.hpp» для всех макросов списка или общий файл заголовка «boost/vmd/vmd.hpp» для всех макросов.
Макросы сек либо работают с секвой VMD, либо возвращают сек VMD. Макросы seq являются:
Table 1.3. Seq macros
Макро |
Параметр |
Возвращение |
Функциональность |
Заголовок |
---|---|---|---|---|
Boost_VMD_IS_VMD_SEQ |
последовательность = последовательность VMD |
1 если последовательность VMD является VMD seq, то 0 |
Тестирует последовательность как VMD seq. Если последовательность пуста, возвращается 1, в противном случае возвращается то же самое, что и BOOST_VMD_IS_SEQ . |
boost/vmd/seq/is_vmd_seq.hpp |
Boost_VMD_SEQ_POP_BACK |
seq = a Boost PP seq |
A VMD seq |
Помещает элемент с конца seq. Если сек имеет один элемент, возвращает пустой сек, иначе работает точно так же, как BOOST_PP_SEQ_POP_BACK. |
boost/vmd/seq/pop_back.hpp |
Boost_VMD_SEQ_POP_FRONT |
seq = a Boost PP seq |
A VMD seq |
Помещает элемент от начала seq. Если сек имеет один элемент, возвращает пустой сек, иначе работает точно так же, как BOOST_PP_SEQ_POP_FRONT. |
boost/vmd/seq/pop_front.hpp |
Boost_VMD_SEQ_PUSH_BACK |
seq = VMD seq, elem = элемент, чтобы нажать на конец VMD seq |
A Boost PP seq |
Нажимает элемент на конец VMD seq. Если сек VMD пуст, возвращаемый сек состоит из этого элемента, иначе он работает точно так же, как BOOST_PP_SEQ_PUSH_BACK . |
boost/vmd/seq/push_back.hpp |
Boost_VMD_SEQ_PUSH_FRONT |
seq = VMD seq, elem = элемент, чтобы нажать на начало VMD seq |
A Boost PP seq |
Нажимает элемент на начало VMD seq. Если сек VMD пуст, возвращаемый сек состоит из этого элемента, иначе он работает точно так же, как BOOST_PP_SEQ_PUSH_FRONT . |
boost/vmd/seq/push_front.hpp |
BOOST_VMD_SEQ_REMOVE |
seq = a Boost PP seq, i = индекс элемента для удаления |
A VMD seq |
Удаляет элемент из Boost PP seq. Если сек имеет один элемент и индекс, подлежащий удалению, равен 0, возвращается пустой сек, иначе работает точно так же, как BOOST_PP_SEQ_REMOVE . |
boost/vmd/seq/remove.hpp |
Boost_VMD_SEQ_SIZE |
seq = VMD seq |
Количество элементов в VMD seq |
Возвращает число элементов в VMD seq. Если сек пустой возвращает 0, в противном случае работает точно так же, как BOOST_PP_SEQ_SIZE . |
boost/vmd/seq/size.hpp |
BOOST_VMD_SEQ_TO_ARRAY |
seq = VMD seq |
Усиление PP массива |
Преобразует VMD seq в массив Boost PP. Если сек пустой возвращает пустой массив, форма которого «(0,())», в противном случае работает точно так же, как BOOST_PP_SEQ_TO_ARRAY . |
boost/vmd/seq/to_array.hpp |
Boost_VMD_SEQ_TO_LIST |
seq = VMD seq |
Расширенный список |
Преобразует сек VMD в список Boost PP. Если сек пустой возвращает пустой список, форма которого «BOOST_PP_NIL», в противном случае работает точно так же, как BOOST_PP_SEQ_TO_LIST . |
boost/vmd/seq/to_list.hpp |
Boost_VMD_SEQ_TO_TUPLE |
seq = VMD seq |
Кортеж VMD |
Преобразует сек VMD в кортеж VMD. Если сек пустой возвращает пустой кортеж, в противном случае работает точно так же, как BOOST_PP_SEQ_TO_TUPLE . |
boost/vmd/seq/to_tuple.hpp |
Разница между макросами сек и их эквивалентами в Boost PP заключается в том, что работа с секвой VMD или возвращение секвой VMD действительны с макросами сек, но с макросами с эквивалентом Boost PP, работающими с пустым сек, вызывает UB, и возвращение пустого сек никогда не может произойти.
Вы можете включить макросы seq, используя их отдельные файлы заголовка, общий файл заголовка «boost/vmd/seq.hpp» для всех макросов seq или общий файл заголовка «boost/vmd/vmd.hpp» для всех макросов.
Кортежные макросы либо работают с кортежом VMD, либо возвращают кортеж VMD. Кортежные макросы:
Table 1.4. Tuple macros
Макро |
Параметр |
Возвращение |
Функциональность |
Заголовок |
---|---|---|---|---|
Boost_VMD_IS_VMD_TUPLE |
последовательность = последовательность VMD |
1 если последовательность VMD является кортежом VMD, то 0 |
Тестирует последовательность в виде VMD-кортежа. Если последовательность пуста, возвращается 1, в противном случае возвращается так же, как BOOST_VMD_IS_TUPLE . |
boost/vmd/tuple/is_vmd_tuple.hpp |
Boost_VMD_TUPLE_POP_BACK |
tuple = Boost PP tuple |
Кортеж VMD |
Помещает элемент с конца кортежа. Если размер кортежа 1 возвращает пустой кортеж, в противном случае он работает точно так же, как BOOST_PP_TUPLE_POP_BACK . |
boost/vmd/tuple/pop_back.hpp |
Boost_VMD_TUPLE_POP_FRONT |
tuple = Boost PP tuple |
Кортеж VMD |
Помещает элемент от начала кортежа. Если размер кортежа 1 возвращает пустой кортеж, в противном случае он работает точно так же, как BOOST_PP_TUPLE_POP_FRONT . |
boost/vmd/tuple/pop_front.hpp |
Boost_VMD_TUPLE_PUSH_BACK |
кортеж = кортеж VMD, элем = элемент для нажатия на конец кортежа VMD |
Усиление PP кортежа |
Нажимает элемент на конец кортежа VMD. Если VMD-кортеж пуст, возвращаемый кортеж состоит из этого элемента, иначе он работает точно так же, как BOOST_PP_TUPLE_PUSH_BACK . |
boost/vmd/tuple/push_back.hpp |
Boost_VMD_TUPLE_PUSH_FRONT |
кортеж = кортеж VMD, элем = элемент для нажатия на начало кортежа VMD |
Усиление PP кортежа |
Нажимает элемент на начало кортежа VMD. Если VMD-кортеж пуст, возвращаемый кортеж состоит из этого элемента, иначе он работает точно так же, как BOOST_PP_TUPLE_PUSH_FRONT . |
boost/vmd/tuple/push_front.hpp |
Boost_VMD_TUPLE_REMOVE |
кортеж = кортеж Boost PP, i = указатель элемента для удаления |
Кортеж VMD |
Удаляет элемент из кортежа Boost PP. Если кортеж имеет один элемент и индекс, подлежащий удалению, равен 0, возвращается пустой кортеж, иначе он работает точно так же, как BOOST_PP_TUPLE_REMOVE . |
boost/vmd/tuple/remove.hpp |
Boost_VMD_TUPLE_SIZE |
кортеж = кортеж VMD |
Количество элементов в кортеже VMD |
Возвращает количество элементов в кортеже VMD. Если кортеж пустой возвращает 0, в противном случае работает точно так же, как BOOST_PP_TUPLE_SIZE . |
boost/vmd/tuple/size.hpp |
BOOST_VMD_TUPLE_TO_ARRAY |
кортеж = кортеж VMD |
Усиление PP массива |
Преобразует шлейф VMD в массив Boost PP. Если кортеж пустой возвращает пустой массив, форма которого «(0,())», в противном случае работает точно так же, как BOOST_PP_TUPLE_TO_ARRAY . |
boost/vmd/tuple/to_array.hpp |
Boost_VMD_TUPLE_TO_LIST |
кортеж = кортеж VMD |
Расширенный список |
Преобразует скорлупу VMD в список Boost PP. Если кортеж пустой, возвращается пустой список, форма которого «BOOST_PP_NIL», иначе работает точно так же, как BOOST_PP_TUPLE_TO_LIST . |
boost/vmd/tuple/to_list.hpp |
Boost_VMD_TUPLE_TO_SEQ |
кортеж = кортеж VMD |
A VMD seq |
Преобразует скорлупу VMD в сек VMD. Если кортеж пустой, возвращает пустой сек, иначе работает точно так же, как BOOST_PP_TUPLE_TO_SEQ . |
boost/vmd/tuple/to_seq.hpp |
Разница между кортежными макросами и их эквивалентными в Boost PP заключается в том, что работа с кортежем VMD или возврат кортежа VMD действительна с кортежными макросами, но с макросами эквивалента Boost PP, работающими с пустым кортежем, вызывает UB, и возврат пустого кортежа никогда не может произойти.
Вы можете включить макросы кортежа, используя их отдельные файлы заголовка, общий файл заголовка «boost/vmd/tuple.hpp» для всех макросов кортежа или общий файл заголовка «boost/vmd/vmd.hpp» для всех макросов.
Набор макросов для функций seq и tuple, которые работают с VMD seqs и VMD tuples, в значительной степени является лишь подмножеством функций seq и tuple в Boost PP. Это отражает тот факт, что ряд макросов в Boost PP для работы с seq или tuple не имеет смысла при расширении для работы с возможным пустым seq или пустым tuple. Например, BOOST_PP_SEQ_FIRST_N не может ничего означать при прохождении пустого seq и BOOST_PP_TUPLE_REM_CTOR. Ничего не могло значить, когда проходил пустой кортеж. Аналогично для других макросов Boost PP seq и tuple, которые не имеют эквивалента VMD.
Набор функций в VMD для работы с, возможно, пустым сек или пустым кортежем позволяет добавлять или удалять элементы в сек или кортеже, которые могут начинаться или заканчиваться пустыми, принимать размер сек или кортежа, даже когда сек или кортеж пусты, конвертировать между массивами, списками, секами или кортежами, которые могут начинаться или заканчиваться пустыми, и тестировать для сек VMD или кортежа VMD. Эта функциональность должна позволить макропрограммистам работать с пустыми секами и кортежами, все еще используя другие Boost PP сек и фанктуиональность для работы с непустыми секами и кортежами. Самый простой способ сделать это - использовать эквивалентные функции VMD seq и VMD tuple при выборе между VMD и Boost PP и использовать функциональность Boost PP seq и tuple иначе. Просто помните, что функция Boost PP seq и tuple никогда не может работать с пустыми секами или пустыми кортежами.
Статья Functionality for "empty" seqs and tuples раздела Chapter 1. The Variadic Macro Data Library 1.9 Useful variadic macros not in Boost PP может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Useful variadic macros not in Boost PP ::
реклама |