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

Splitting modifiers

Boost , Chapter 1. The Variadic Macro Data Library 1.9 , Macros with modifiers

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Макрос BOOST_VMD_ELEM, который по умолчанию просто возвращает элемент последовательности, имеет использование, при котором он может возвращать как элемент, так и оставшуюся часть последовательности после элемента, или даже только оставшуюся часть последовательности после элемента самостоятельно. Это предлагает форму расщепления последовательности на конкретном элементе. При использовании для возврата оставшейся части последовательности оставшиеся данные могут впоследствии снова рассматриваться как последовательность VMD.

Для этого используется другой набор дополнительных модификаторов, который будет называться «расщепляющиеся модифферы». Эти модификаторы:

  • BOOST_VMD_RETURN_AFTER, который возвращает как информацию о элементе, так и остальную последовательность после элемента в виде двухэлементного набора
  • BOOST_VMD_RETURN_ONLY_AFTER, который возвращает только остальную часть последовательности после указанного элемента
  • BOOST_VMD_RETURN_NO_AFTER - это внутренний дефолт, который возвращает только сам элемент. Он никогда не должен быть указан, но может быть использован для переопределения предыдущего модификатора расщепления, указанного в качестве необязательного параметра.

Если в качестве дополнительных параметров для BOOST_VMD_ELEM указано более одного из модификаторов расщепления, то действует последний указанный.

Модификаторы разделения BOOST_VMD_RETURN_NO_AFTER и BOOST_VMD_RETURN_AFTER работают либо с модификаторами возвратного типа, либо с модификаторами фильтрации, если они используются. Модификатор разделения BOOST_VMD_RETURN_ONLY_AFTER работает с модификатором фильтрации, если он используется, и любые модификаторы возвратного типа будут проигнорированы. Опциональные модификаторы могут возникать в любом порядке после требуемых параметров для BOOST_VMD_ELEM.

Если BOOST_VMD_RETURN_AFTER действует и элемент не найден, либо потому, что номер элемента находится вне диапазона для последовательности, либо потому, что фильтрация не соответствует типу элемента, кортеж все равно будет возвращен, но оба его элемента будут пустыми.

#include <boost/vmd/elem.hpp>
#define BOOST_VMD_REGISTER_ANAME (ANAME) // an identifier must always be registered to be found by VMD
#define A_SEQUENCE (1,2,3) 46 (list_data1,BOOST_PP_NIL) BOOST_VMD_TYPE_SEQ ANAME
BOOST_VMD_ELEM(2,A_SEQUENCE) will return '(list_data1,BOOST_PP_NIL)'
BOOST_VMD_ELEM(2,A_SEQUENCE,BOOST_VMD_RETURN_NO_AFTER) will return '(list_data1,BOOST_PP_NIL)'
BOOST_VMD_ELEM(2,A_SEQUENCE,BOOST_VMD_RETURN_AFTER) will return '((list_data1,BOOST_PP_NIL),BOOST_VMD_TYPE_SEQ ANAME)'
BOOST_VMD_ELEM(2,A_SEQUENCE,BOOST_VMD_RETURN_ONLY_AFTER) will return 'BOOST_VMD_TYPE_SEQ ANAME'
BOOST_VMD_ELEM(5,A_SEQUENCE) will return emptiness
BOOST_VMD_ELEM(5,A_SEQUENCE,BOOST_VMD_RETURN_NO_AFTER) will return emptiness
BOOST_VMD_ELEM(5,A_SEQUENCE,BOOST_VMD_RETURN_AFTER) will return '(,)'
BOOST_VMD_ELEM(5,A_SEQUENCE,BOOST_VMD_RETURN_ONLY_AFTER) will return emptiness

Комбинирование разделительных модификаторов с модификаторами возвратного типа:

BOOST_VMD_ELEM(2,A_SEQUENCE,BOOST_VMD_RETURN_AFTER,BOOST_VMD_RETURN_TYPE) will return '((BOOST_VMD_TYPE_LIST,(list_data1,BOOST_PP_NIL)),BOOST_VMD_TYPE_SEQ ANAME)'

Комбинирование разделительных модификаторов с фильтрующими модификаторами:

BOOST_VMD_ELEM(2,A_SEQUENCE,BOOST_VMD_RETURN_AFTER,BOOST_VMD_TYPE_LIST) will return '((list_data1,BOOST_PP_NIL),BOOST_VMD_TYPE_SEQ ANAME)'

PrevUpHomeNext

Статья Splitting modifiers раздела Chapter 1. The Variadic Macro Data Library 1.9 Macros with modifiers может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Macros with modifiers ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 18:38:38/0.0082921981811523/1